'sh -c'の変数定義

'sh -c'の変数定義

"sh -c"コマンド文字列に変数を定義しようとしています。

sh -c "TMP=??; echo $TMP;"

何も印刷されません。

「sh -c」文字列に変数を定義できないのはなぜですか?

答え1

sh -c 'TMP=??; echo $TMP;'

二重引用符を使用すると、コマンドラインを作成するときにパラメータ拡張が行われます。つまり、シェルには表示されません。

TMP=??; echo $TMP;

その主張でしかし

TMP=??; echo ;

$TMP呼び出しシェル環境で空の場合。

答え2

sh -c 'TMP=??; echo "$TMP"'

そしてダブル対話型シェルによって拡張されたsh -cコードの周りに引用符があります。$TMP今後コードsh -c実行。一重引用符を使用すると、$TMPシェル内で拡張されますsh。 ($TMP変数の拡張も正しく引用されましたecho。)

一重引用符は、変数拡張から文字列を保護します。

これをスクリプト内でファイル名globbingパターン??として扱わない場合は、次のようにします。sh -c

sh -c 'TMP="??"; echo "$TMP"'

関連情報