GNU/Linux >> Linux の 問題 >  >> Linux

$var対${var}そして引用するか引用しないか?

書くことができます

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によると、中括弧はオプションです。


Linux
  1. 組み込みコマンドとそうでないコマンドの違いは?

  2. 「nohupSudo…」はPasswdを要求せず、何もしませんか?

  3. インストールしたばかりのパッケージは正当ですか?そうでない場合はアンインストールする方法はありますか?

  1. 7 Linux Grep OR、Grep AND、Grep NOT 演算子の例

  2. シンボリック リンクがフォルダーではなくファイルを作成するのはなぜですか?

  3. rdesktop でコピーと貼り付けが機能しない

  1. サブディレクトリではなく現在のディレクトリのみで「find」コマンドを実行する方法

  2. sed e および g フラグが一緒に機能しない

  3. readlink -f および -e オプションの説明が明確でない