Bash シェル: bc の計算結果を変数に割り当てて出力するにはどうすればよいですか?

Bash シェル: bc の計算結果を変数に割り当てて出力するにはどうすればよいですか?

私は以下のコードを再現しようとしていますここここに画像の説明を入力してください

何らかの理由で、私のコンピュータでは動作しません。数値ではなく、出力がコマンドそのものです。

apple$ x='echo "var=500;var%=7;var"|bc'
apple$ $x
"var=500;var%=7;var"|bc

なぜそうなるのか知りたいです。何が間違っていたのでしょうか?

答え1

ソース`では、コマンドの置換を示すためにバックティック ( ) を使用しています。バックティック内に指定されたコマンドが実行され、その結果がその場所に配置されます。この場合、単純な変数の割り当てであるため、コマンドの結果が変数に割り当てられます。

-xこれは、bash のオプションを使用すると簡単に確認できます。

$ x=`echo "var=500;var%=7;var"|bc`
++ echo 'var=500;var%=7;var'
++ bc
+ x=3

バックティック文字の代わりに、一重引用符を使用しています。一重引用符は、シェルにリテラル値を保持し、その内容にいかなる処理も適用しないように指示します。その結果、コマンドはそのまま変数に割り当てられます。対応する-x出力は次のとおりです。

$ x='echo "var=500;var%=7;var"|bc'
+ x='echo "var=500;var%=7;var"|bc'

最後に、変数の内容を出力するには、echoまたは を使用する必要がありますprintf。 'x' の値が 3 の場合、 を実行するとエラー メッセージ$xが表示されます-bash: 3: command not found。 実行が機能したのは、コマンドが変数の内容の一部であった$xためです。echo

答え2

Haxiel が指摘したように、バックティック文字の代わりに、おそらく一重引用符が使用されています。ただし、バックティック ( ) を使用するよりも、`を使用することをお勧めします$()。バックティックは非推奨であり、$()POSIX と互換性があります。

あなたの例では、次のようにすることができます:

x=$(echo "var=500;var%=7;var" | bc)
echo "$x"

あるいは、ワンライナーで言うと:

echo "var=500;var%=7;var" | bc

関連情報