を使用すると、変数の引用の効果をいつでも表示できますprintf
。
単語分割は次の場所で行われvar1
ます。
$ var1="hello world"
$ printf '[%s]\n' $var1
[hello]
[world]
var1
引用符で囲まれているため、単語の分割はありません:
$ printf '[%s]\n' "$var1"
[hello world]
var1
内部$()
での単語分割、次と同等echo "hello" "world"
:
$ var2=$(echo $var1)
$ printf '[%s]\n' "$var2"
[hello world]
単語の分割はありませんvar1
、引用符を付けなくても問題ありません$()
:
$ var2=$(echo "$var1")
$ printf '[%s]\n' "$var2"
[hello world]
var1
再び単語分割:
$ var2="$(echo $var1)"
$ printf '[%s]\n' "$var2"
[hello world]
両方を引用して、最も簡単な方法を確認してください。
$ var2="$(echo "$var1")"
$ printf '[%s]\n' "$var2"
[hello world]
グロビングの問題
変数を引用しないと、その内容のグロブ展開につながる可能性があります。
$ mkdir test; cd test; touch file1 file2
$ var="*"
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
これは、変数が展開された後にのみ発生することに注意してください。割り当て中にグロブを引用する必要はありません。
$ var=*
$ printf '[%s]\n' $var
[file1]
[file2]
$ printf '[%s]\n' "$var"
[*]
set -f
この動作を無効にするために使用します。
$ set -f
$ var=*
$ printf '[%s]\n' $var
[*]
そしてset +f
、再度有効にするには:
$ set +f
$ printf '[%s]\n' $var
[file1]
[file2]