Bashスクリプト内で変数を割り当てる

Bashスクリプト内で変数を割り当てる

これは明らかにSSCCEなので(それ自体では)意味がありません。たとえばY、この最小例では変数の割り当ては使用されません。私は実際の状況に合った正しい構文を見つけようとしています。

Bashシェルから直接次のことができます。

Y=10 echo foo

bashファイルに以下を含めることもできますfoo.sh

#!/bin/bash
X="echo foo"
$X

...その後、次を実行します。

$./foo.sh
foo

ただし、bashファイルに次のものがある場合:

#!/bin/bash
X="Y=10 echo foo"
$X

...その後、次のような結果が出ます。

$ ./foo.sh 
./foo.sh: line 3: Y=10: command not found

上記の正しい構文は何ですか?

ベストアンサー1

問題は、オプションのパラメータ割り当てが認識されることです。今後パラメータ拡張が発生したため、行

$X

以前の割り当てがないコマンドとして認識されます。拡張結果の最初の単語がコマンド名であると仮定するので、シェルはY=10

通常、コードを変数に保存せずに関数に保存する必要があります。

X () {
    Y=10 echo foo
}

おすすめ記事