${var}または$varを使用する最良の方法は何ですか? [コピー]

${var}または$varを使用する最良の方法は何ですか? [コピー]

私はこれを知って${var}同じ$varことをしました。また、中かっこを使用して、${var:=word}または同じ高度なオプションを表すことができることも知っています${var#pattern}。説明もあります。ここ

しかし、いくつかのbashスクリプトでは、最も単純な形式で中括弧が使用されていることがわかります。${var}時にはこの表記法のみを見ることができます$var

$var同じ機能を実行するので、単純な構文よりもこの構文を好む理由はありますか?携帯性のためですか?これはコーディングスタイルですか?

真剣な開発者としてどのような構文を使うべきですか?

答え1

これは明確さのためです。 arzyfex${foo}_barが指摘したように$foo_bar。常に校正器を使用すると、決してそのような間違いを犯すことはありません。また、2桁以上の位置パラメータを参照するには中括弧が必要です(例:)${11}

答え2

{}と言うbrace expansion${}これを変数拡張と呼びます。の$有無にかかわらず変数宣言と代入{}。使用する必要があります

foo=50

送る。変数を読み取るには(つまり、変数を「拡張」するには)を使用する必要があります$

$foo      // use the variable
${foo}    // same as above
${foo}bar // expand foo, and append "bar" too
$foobar   // same as ${foobar}, i.e expand a variable called foobar, if it exists.

これは時々私を混乱させます。他の言語では、変数が割り当ての左側にあるか右側にあるかにかかわらず、同じ方法で変数を参照します。しかし、シェルスクリプトは異なります。$foo=50あなたが思うように動作しません!


中括弧は、一連のコマンドを実行するためにも使用されます。現在のシェルコンテキスト(例:

$ { date; top -b -n1 | head ; } >logfile 
# 'date' and 'top' output are concatenated, 

$ { date; make 2>&1; date; } | tee logfile
# now we can calculate the duration of a build from the logfile

関連情報