3

私は Bash を勉強しています。

C=例

エコー "$C"

フォームと同じ結果を与える

C="例"

エコー $C

" " を変数の代入または $ の後に配置する方がよいかどうかを知りたいです。またはそれが無関心である場合。または、一方が他方よりも「美しい」と見なされる場合。

4

5 に答える 5

5

変数の値が単一の単語 (空白なし) であることが確実な場合は、$varnameorを使用しても問題ありません${varname}。これを保証できない場合は、"$varname"またはを使用する必要があります"${varname}"。bash はコマンドを解釈する前に単語分割を行うため、式を引用しないと実際に構文エラーが発生する可能性があることに注意してください。たとえば、

C="white space"
if [ -z $C ]
then
  ...
fi

構文エラーになります:

-bash: [: white: binary operator expected

これはうまくいきますが:

C="white space"
if [ -z "$C" ]
then
  ...
fi

これは、最初の引用符で囲まれていないケースで変数が展開された後、bash が次のように表示されるためです。

if [ -z white space ]
then
  ...
fi

また、-z演算子は 2 つの引数ではなく、1 つだけを想定しています。2 番目の引用されたケースでは、bash は次のように表示します。

if [ -z "white space" ]
then
  ...
fi

つまり、必要に応じて引数を 1 つだけ指定します。割り当てで引用符が使用されたことにも注意してください

C="white space"

あなたが書いた場合にもエラーが発生するため

C=white space

spaceこれは、追加された変数を含む環境でコマンドを実行することを意味するためですC=white

そのため、一般に、予期しない変数値に対してコードがより堅牢であることを確認するために、これらの式を引用する必要があります。これは、変数値が入力やファイルなどから取得される場合に特に当てはまります。通常、整数変数の引用符を削除しても安全です。または、変数の値をecho $C.

于 2011-11-27T11:26:40.423 に答える
4

文字列に空白文字が含まれている場合は重要です。引用符がない場合、空白文字はトークン区切り文字として扱われ、bash は置換された文字列を式として解釈しようとします。

変数を式の一部として評価するつもりがない場合は、常に安全のために引用符を付けてください。

入力を "example" から "two words" に変更すると、上記を見落としていた場合、スクリプトの実行時に奇妙な動作や構文エラーが発生する可能性があります。

言い換えると、

C="abc def"
# the echo command receives one argument: "abc def"
echo "$C"
# echo receives two arguments: "abc" and "def"
echo $C
# bash tries to execute the program "abc" with a first argument "def"
$C
# bash tries to execute the program "abc def"
"$C"
于 2011-11-27T11:18:13.347 に答える
2

引用符と単語の分割に関する優れたドキュメント:

「より多くの見積もりを使用してください!」それらは不可欠です。また、ととの違いを学び'ます"http://mywiki.wooledge.org/Quotesおよびhttp://wiki.bash-hackers.org/syntax/wordsを参照してください。

IRC freenode #bashからのgreybotサンプルが世界と話している=)

于 2011-11-27T11:32:22.600 に答える
1

1 語の定数であれば問題ありません。

ただし、2 種類の引用について読む必要があります。この記事とこのドキュメントを試してください。SO質問もあります。

于 2011-11-27T11:17:46.677 に答える
0

空白のある実際の例で試してください。文字列のexample場合、引用符はまったく必要ありません。というファイルを作成してThis is an example.txtから、再試行してください。echoで代用ls...

于 2011-11-27T11:18:17.950 に答える