BASHを使用したスクリプトに関して、次の変数の違いは何ですか。
$var
"$var"
${var}
"${var}"
と の間$var
に違いはありません と の間に${var}
違いはありませんが、以前のバージョンを使用するとパーサーが意図を識別できない場合があることを除きます。検討:"$var"
"${var}"
foo=hello
echo "$fooworld"
echo "${foo}world"
echo
変数fooworld
が定義されていないため、最初は何も出力しません。シェルが変数helloworld
を参照していると判断できたため、2 番目の出力が表示されます。foo
$var
との違い"$var"
は、引用符で囲まれていない変数展開が、展開後にシェルによって評価されることです。そのような:
var='ls /'
$var
Lists /
、展開後、シェルはスペースをトークン区切り文字として評価するため、
var='ls /'
"$var"
ls /: No such file or directory
指定されたコマンドls /
がユーザーの環境で使用できないため、結果は次のようになります。
引用符で囲まれたものは、単一のパラメーターに展開され、個別の単語に分割されません。
${var}
次の文字が変数名の一部である可能性がある場合、この表記法は便利です"${var}name"
。
function args() {
while [ $# -gt 0 ]; do echo "arg: '$1'"; shift; done
}
# var=" a b c"
# args $var
arg: 'a'
arg: 'b'
arg: 'c'
# args "$var"
arg: ' a b c'