書くことができます
VAR=$VAR1
VAR=${VAR1}
VAR="$VAR1"
VAR="${VAR1}"
私にとっての最終結果はすべてほぼ同じように見えます。なぜ私はどちらかを書く必要がありますか?これらのいずれかがポータブル/POSIXではありませんか?
承認された回答:
VAR=$VAR1
VAR=${VAR1}
の簡略版です 。たとえば、配列インデックスを参照する(移植性がない)、または部分文字列を削除する(POSIX移植可能)など、2番目にできることと最初にできないことがあります。 POSIX仕様のBashGuidefor Beginners andParameterExpansionの「Moreonvariables」セクションを参照してください。
rm -- "$VAR1"
のように変数を引用符で囲みます または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によると、中括弧はオプションです。