私は Bash を勉強しています。
C=例
エコー "$C"
フォームと同じ結果を与える
C="例"
エコー $C
" " を変数の代入または $ の後に配置する方がよいかどうかを知りたいです。またはそれが無関心である場合。または、一方が他方よりも「美しい」と見なされる場合。
変数の値が単一の単語 (空白なし) であることが確実な場合は、$varname
orを使用しても問題ありません${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
.
文字列に空白文字が含まれている場合は重要です。引用符がない場合、空白文字はトークン区切り文字として扱われ、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"
引用符と単語の分割に関する優れたドキュメント:
「より多くの見積もりを使用してください!」それらは不可欠です。また、ととの違いを学び'
ます"
。http://mywiki.wooledge.org/Quotesおよびhttp://wiki.bash-hackers.org/syntax/wordsを参照してください。
IRC freenode #bashからのgreybotサンプルが世界と話している=)
空白のある実際の例で試してください。文字列のexample
場合、引用符はまったく必要ありません。というファイルを作成してThis is an example.txt
から、再試行してください。echo
で代用ls
...