環境変数のエクスポート

環境変数のエクスポート

値に変数を含む環境変数をエクスポートしたいが、エクスポート中に変数(値内にある)を評価したくありません。つまり

export STY=for i in {0..3}; do echo $i; done

したがって、私の要件は、STYをエコーするときに必要な出力が次のようになるはずです。

echo $STY
for i in {0..3}; do echo $i; done 

ただし、$i はエクスポート中に評価されます。私はそのままにする必要があります。

答え1

欲しいものがあれば説明するあなたはそれを要求しました:

export STY="for i in {0..3}; do echo \$i; done"

あなたが本当に意味するものが欲しいなら:

function STY() {
    for i in {0..3}; do echo $i; done
}
export -f STY

答え2

つまり、eval "$hello"を使用してください。

(この回答はもともと次のように言いました:eval $helloを使用しましたが、他のポスターではeval "$hello"がより安全であると指摘しました。)

次のように:

bash-2.05a$ export hello='for i in 0 1 2 3; do echo $i; done'

単に行の先頭に$helloと言っても機能しません。 forループは$variable拡張の前に処理されるためです(ステップ指向言語は嫌いです)。

bash-2.05a$ $hello
bash: for: command not found

しかし、評価は機能します。

bash-2.05a$ eval $hello
0
1
2
3
bash-2.05a$ 

あなたが間違ったもの(または間違っている可能性があるもの):

bash-2.05a$ export hello='for i in {0..4}; do echo $i; done'
bash-2.05a$ $hello
bash: for: command not found
bash-2.05a$ eval $hello
{0..4}
bash-2.05a$ for i in {0..4}; do echo $i; done
{0..4}
bash-2.05a$ 

つまり、少なくとも私が使用しているbashバージョンでは、{0..4}はあなたが思うように動作しません。

http://www.cyberciti.biz/faq/bash-for-loop/{0..4} 関数が bash 3.0 以降に現れるとしましょう。

たぶんあなたも私のように(家ではなくwoprkで)古いバージョンのbashを使用していますか?

答え3

$hello期待どおりに機能しない理由:

  • 拡張はトークンに分割した後、コマンドラインで行われます。
  • for...do...doneCompound Commandトークン化段階で決定されます。
  • forコマンドではありません。

したがって、次の操作を実行できません。

$ "for" i in {0..4}; do echo $i; done
sh.exe": syntax error near unexpected token `do'

Bashがコマンドラインをトークンに分割すると"for"notが表示されるため、forトークンはdo予期しないものです。


あなたの場合:

$ hello='for i in {0..4}; do echo $i; done'
$ $hello
sh.exe": for: command not found

Bashはtokenを探し、$hello&&variable-expansionword-spliting順番に発生します。
実際、bashは結果を次のように解析しますSimple Command

  • command( for) は残りを args( i, in, {0..4}, ;, do, ...) として使用します。
  • for、、、doなど;done特別な意味を失いました。

詳細を読む

答え4

問題には2つの側面があります。

  • 複雑な式を変数に保存
  • 保存された式の実行

式を保存するにはエスケープシーケンスと特別な引用が必要になることがあります(あなたの例ではこれが本当のようです)。実行は 2 つの方法で行うことができます。

  • Borealidの答えと同じ関数呼び出し:data = `STY()` - 関数の標準出力は変数に格納されます。
  • 式の評価: データ =eval $STY例で提供される変数の定義

関連情報