Bash -cで変数を宣言する方法

Bash -cで変数を宣言する方法

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

関連情報