整数式を生成するパイプライン命令セットがあります。たとえば、(1 +(0x1f+0x02))
式を次のようにラップして評価(結果値を取得)できるようになります$()
。
$ echo $((1 +(0x1f+0x02)))
34
単一のコマンドで動作させることに興味があるので、コマンドライン全体をパイピングしようとしましたが、$()
bashは式を評価できないようです。この作品は私が見ている問題を再現することができます。
$ TEST="(1 +(0x1f+0x02))"
$ echo "$TEST"
(1 +(0x1f+0x02))
$ echo $($TEST)
bash: (1: command not found
私がここで何を見逃しているのかよくわかりません。
答え1
算術拡張は内部的に発生しますが、$((...))
コマンド置換は発生します。名前付きコマンド(変数値の最初の単語)が$(...)
ないため、シェルがコマンド置換でそのコマンドを使用しようとすると、エラーメッセージが表示されます。(1
TEST
$TEST
やりたいかもしれません
expression='(1 +(0x1f+0x02))'
echo "$(( "$expression" ))"
4.4より前のバージョンでは、bash
内部二重引用符セットを削除してください。バージョン4.4は、bash
算術拡張で二重引用符で囲まれた識別子の拡張を可能にする最初の製品です。