bash -c
コマンド内で変数を宣言する方法がわかりません。
bash -c "var=3; echo $var"
答え1
ここで実際に何が起こっているのか見てみましょう。
$ set -x
$ bash -c "var=3; echo $var"
+ bash -c 'var=3; echo '
set -x
実際に実行されたコマンドを追跡できます(オフを使用)set +x
。ここでは、$var
変数が空の文字列に展開されていることがわかります。今後サブシェルbash -c
も実行できます。
bash -c
これは、現在のシェルが文字列内で変数拡張を実行するように促すパラメータの二重引用符が原因で発生します。現在のシェルで変数var
が定義されていないか空であるため、その拡張子は空の文字列です。
シェルの「干渉」から文字列を保護するには、単一引用符を使用してください。
$ bash -c 'var=3; echo $var'
+ bash -c 'var=3; echo $var'
3
...または脱出$
(あまり悪いIMO):
$ bash -c "var=3; echo \$var"
+ bash -c 'var=3; echo $var'
3
答え2
$?
合計は$a
呼び出しシェルで計算されるためです。
bash -c 'cat /tmp/lol ; a=$?; if (( $a == 0)); then echo "2"; fi;'