8
確かに、私はbash新生児です。私はいつも、私のシェルスクリプト目的のためにPythonを手に入れたいと思っています。しかし、私はいくつかのbashを学ぶために自分自身をプッシュしようとしています。なぜ次のコードがうまくいかないのか不思議です。インラインbashスクリプト変数
sh -c "F=\"123\"; echo $F"
確かに、私はbash新生児です。私はいつも、私のシェルスクリプト目的のためにPythonを手に入れたいと思っています。しかし、私はいくつかのbashを学ぶために自分自身をプッシュしようとしています。なぜ次のコードがうまくいかないのか不思議です。インラインbashスクリプト変数
sh -c "F=\"123\"; echo $F"
二重引用符で囲まれた文字列内の変数展開は、コマンドが呼び出される前に起こるので、それは動作しません。実際にechoコマンドを呼び出す前に
echo "/home/lars"
:
echo "$HOME"
シェルにこれを変換します。それは私が入力した場合、です。同様に、場合は、次のように入力します。
sh -c "F=\"123\"; echo $F"
これは、に変換されます:
sh -c "F=\"123\"; echo"
sh
コマンドを呼び出す前に。次の例のように、変数の展開を抑制するために、単一引用符を使用することができます。
sh -c 'F="123"; echo $F'
ます。また、バックスラッシュで$
をエスケープすることができます
sh -c "F=\"123\"; echo \$F"
また、あなたは 'bash'を学ぼうとしている場合、過ごします'bash'のマニュアルページと[the #bash faq](http://mywiki.wooledge.org/BashFAQ)で質の高い時間を過ごせました。 – larsks
また、一重引用符では引用符をバックスラッシュエスケープする必要はないことに注意してください。 '' F = \ "123 \" ''ではなく' 'F =" 123 "''。 – larsks
ありがとう!完全な意味合いを持つ。それは大きな違いを生む小さなものです。 :-) – Daniel