ローカル割り当ての右側の引用を安全に省略できますか?
function foo {
local myvar=${bar}
stuff()
}
私は主にbash
に興味がありますが、他のシェルのコーナーケースに関する情報は大歓迎です。
通常、空白などの文字が含まれる可能性がある変数の使用法を引用します。そうしないと、次のような問題が発生します。
#!/bin/bash
bar="hi bye"
function foo {
local myvar=${bar}
printf "%s\n" $myvar
printf "%s\n" "$myvar"
}
foo
割り当てでの変数の使用法は引用符を必要としないように見えますが、printf
などで使用する場合は、引用符で囲む必要があります。
printf "%s\n" "$myvar"
注:変数$IFS
は、区切り文字を決定するものであることを覚えておいてください。
IFS The Internal Field Separator that is used for Word splitting after
expansion and to split lines into words with the read builtin command.
The default value is ``<space><tab><newline>''.
Bashでデバッグを有効にすると、舞台裏で何が起こっているかを確認できます。
$ bash -x cmd.bash
+ bar='hi bye'
+ foo
+ local 'myvar=hi bye'
+ printf '%s\n' hi bye
hi
bye
+ printf '%s\n' 'hi bye'
hi bye
上記では、変数$bar
が$myvar
に正常に渡されたことがわかりますが、$myvar
を使用するときは、$myvar
の内容を認識している必要があります。