コードをコピーしようとしています。ここ
何らかの理由で私のコンピュータでは動作しません。数値以外の出力はコマンド自体です。
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
runコマンドは変数の内容の一部である$x
ため、あなたの場合には機能します。echo