パラメータ拡張時:
二重引用符を使用したパラメータ拡張は、二重引用符がないよりも常に良いですか(または悪いですか?)二重引用符が推奨されない状況はありますか?
パラメータ名の周囲に中かっこをいつ追加する必要がありますか?
パラメータ名の周りに中括弧の代わりにパラメータ拡張の周囲に二重引用符を使用する必要がある場合はいつですか?その反対はいつ頃でしょうか?どちらかはいつ動作しますか?
ありがとうございます。
ベストアンサー1
引用する
拡張値を維持したい場合は、参照パラメータ拡張が常に優れています。いいえ単語に分割してIFS値の影響を受けます。たとえば、
$ IFS=" elr"
$ var="Hello World"
$ printf '<%s> ' $var; echo
<H> <> <> <o> <Wo> <> <d>
$ printf '<%s> ' "$var"; echo
<Hello World>
しかし、実際には、分割を完了するために引用されていない拡張が必要な非常に制限的なケースがあります。
$ IFS=$' \t\n'
$ var="one two three"
$ array=($var)
$ declare -p array
declare -a array=([0]="one" [1]="two" [2]="three")
このトピックへのリンク:
いつ二重引用符が必要ですか?
ザイルズ
スティーブン・チャジェラス
パンツサスペンダー
変数名の後の文字をその変数名に関連付けてはいけない場合は、常に中括弧が必要です。
$ var=one
$ echo "The value of var is $varvalue"
The value of var is
$ echo "The value of var is ${var}value"
The value of var is onevalue
~からLESS="+/which is not to be interpreted as part" man bash
${parameter}
パラメーターの後に名前の一部として解釈されない文字が続く場合は、中括弧が必要です。
また、2桁の位置引数を処理するときは中括弧が必要です。
$ set -- one two t33 f44 f55 s66 s77 e88 n99 t10 e11 t12
$ echo "$11 ${11} $12 ${12}"
one1 e11 one2 t12
マニュアルを読む:LESS="+/enclosed in braces" man bash
複数の数値で構成される位置引数を拡張する場合は、中かっこで囲む必要があります。
またはLESS="+/with more than one digit" man bash
$ {parameter}
パラメーターの値が置き換えられます。引数が2桁以上の位置引数の場合は、中括弧が必要です。
引用符と中括弧
パラメータ名の周りに中括弧の代わりにパラメータ拡張の周囲に二重引用符を使用する必要がある場合はいつですか?その反対はいつ頃でしょうか?どちらかはいつ動作しますか?
「しなければならない」というルールはなく、次のいずれかを使用する可能性が開いています。
$ var=One
$ echo "ThisIs${var}Var"
ThisIsOneVar
$ echo "ThisIs""$var""Var"
ThisIsOneVar
$ echo 'ThisIs'"$var"'Var'
ThisIsOneVar
$ echo 'ThisIs'"${var}"'Var'
ThisIsOneVar
すべての拡張は全く同じですので、必要なものを使用してください。