引用する

引用する

私は書くことができます

VAR=$VAR1
VAR=${VAR1}
VAR="$VAR1"
VAR="${VAR1}"

私にとって最終結果はほぼ同じようです。なぜこれらのことの1つを書くべきですか?移植可能/POSIXではないものはありますか?

ベストアンサー1

VAR=$VAR1はい、単純化されたバージョンですVAR=${VAR1}。 2つ目はできますが、1つ目はできません。たとえば、配列インデックス参照(移植可能ではない)や部分文字列の削除(POSIX - 移植可能)などがあります。より変数に関する追加情報Bash初心者ガイドの一部パラメータ拡張POSIX仕様で。

変数の周りに引用符を使用することをお勧めします(例:rm -- "$VAR1"orの引用符)。rm -- "${VAR}"これは変数の内容を原子単位にします。変数の値に空白($IFS特殊変数の文字、デフォルトでは空白)またはワイルドカード文字が含まれていて、引用符を付けないと、各単語がファイル名の生成(ワイルドカード)で考慮され、拡張が実行されます。あなたは仕事を。

$ find .
.
./*r*
./-rf
./another
./filename
./spaced filename
./another spaced filename
./another spaced filename/x
$ var='spaced filename'
# usually, 'spaced filename' would come from the output of some command and you weren't expecting it
$ rm $var
rm: cannot remove 'spaced': No such file or directory
# oops! I just ran 'rm spaced filename'
$ var='*r*'
$ rm $var
# expands to: 'rm' '-rf' '*r*' 'another spaced filename'

$ find .
.
./another
./spaced filename
./another spaced filename
$ var='another spaced filename'
$ rm -- "$var"
$ find .
.
./another
./spaced filename

移植性について:に従ってPOSIX.1-2008 セクション 2.6.2、中括弧はオプションです。

おすすめ記事