2012-04-01 19 views
8

確かに、私はbash新生児です。私はいつも、私のシェルスクリプト目的のためにPythonを手に入れたいと思っています。しかし、私はいくつかのbashを学ぶために自分自身をプッシュしようとしています。なぜ次のコードがうまくいかないのか不思議です。インラインbashスクリプト変数

sh -c "F=\"123\"; echo $F" 

答えて

13

二重引用符で囲まれた文字列内の変数展開は、コマンドが呼び出される前に起こるので、それは動作しません。実際に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" 
+0

また、あなたは 'bash'を学ぼうとしている場合、過ごします'bash'のマニュアルページと[the #bash faq](http://mywiki.wooledge.org/BashFAQ)で質の高い時間を過ごせました。 – larsks

+0

また、一重引用符では引用符をバックスラッシュエスケープする必要はないことに注意してください。 '' F = \ "123 \" ''ではなく' 'F =" 123 "''。 – larsks

+0

ありがとう!完全な意味合いを持つ。それは大きな違いを生む小さなものです。 :-) – Daniel

関連する問題