"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"'