ブレース($var
vs. ${var}
)
ほとんどのケースでは、$var
と${var}
同じです。
var=foo
echo $var
# foo
echo ${var}
# foo
ブレースは、式のあいまいさを解決するためにのみ必要です。
var=foo
echo $varbar
# Prints nothing because there is no variable 'varbar'
echo ${var}bar
# foobar
引用符($var
対"$var"
対"${var}"
)
変数を二重引用符で囲むと、空白が含まれている場合でも、変数を単一の単語として扱うようにシェルに指示します。
var="foo bar"
for i in "$var"; do # Expands to 'for i in "foo bar"; do...'
echo $i # so only runs the loop once
done
# foo bar
この動作を以下と比較してください。
var="foo bar"
for i in $var; do # Expands to 'for i in foo bar; do...'
echo $i # so runs the loop twice, once for each argument
done
# foo
# bar
同様に$var
対${var}
、括弧だけ例えば、曖昧さ回避のために必要とされます。
var="foo bar"
for i in "$varbar"; do # Expands to 'for i in ""; do...' since there is no
echo $i # variable named 'varbar', so loop runs once and
done # prints nothing (actually "")
var="foo bar"
for i in "${var}bar"; do # Expands to 'for i in "foo barbar"; do...'
echo $i # so runs the loop once
done
# foo barbar
"${var}bar"
上記の2番目の例ではも記述できることに注意してください。その"${var}"bar
場合、中括弧はもう必要ありません"$var"bar
。ただし、文字列に多くの引用符がある場合、これらの代替形式は読みにくくなる可能性があります(そのため、維持が困難になります)。このページでは、Bashでの引用の概要を説明しています。
配列($var
vs. $var[@]
vs. ${var[@]}
)
今あなたの配列のために。bashのマニュアルによると:
添え字なしで配列変数を参照することは、添え字0で配列を参照することと同じです。
つまり、でインデックスを指定しない場合[]
、配列の最初の要素が取得されます。
foo=(a b c)
echo $foo
# a
これはまったく同じです
foo=(a b c)
echo ${foo}
# a
配列のすべての要素を取得するに@
は、インデックスなどとして使用する必要があります${foo[@]}
。配列では中括弧が必要です。それがないと、シェルが$foo
最初にパーツを展開し、配列の最初の要素にリテラルが続くから[@]
です。
foo=(a b c)
echo ${foo[@]}
# a b c
echo $foo[@]
# a[@]
このページは、Bashの配列の優れた紹介です。
引用の再訪(${foo[@]}
対"${foo[@]}"
)
あなたはこれについて尋ねませんでしたが、それは知っておくと良い微妙な違いです。配列の要素に空白が含まれる可能性がある場合は、二重引用符を使用して、各要素が個別の「単語」として扱われるようにする必要があります。
foo=("the first" "the second")
for i in "${foo[@]}"; do # Expands to 'for i in "the first" "the second"; do...'
echo $i # so the loop runs twice
done
# the first
# the second
これを二重引用符なしの動作と比較してください。
foo=("the first" "the second")
for i in ${foo[@]}; do # Expands to 'for i in the first the second; do...'
echo $i # so the loop runs four times!
done
# the
# first
# the
# second
bash