eval コマンドを 2 回使用します。

eval コマンドを 2 回使用します。

考える:

a=b; b=c; c=d

これにより、次のようなeval echo \$$a出力が生成されます。

c

dinput のみを使用して出力を抽出するには、a次のことを試しました。

(i)eval echo \$(eval echo \$$a)エラーが発生します。

syntax error near unexpected token '('

(ii)eval echo \$\(eval echo \$$a\)成果物の生産:

c

カッティングカッコをエスケープするとエラーが取り除かれる理由を理解できません。

dまた、誰かが2番目のインスタンスから出力を取得できない理由を説明できますか?

ベストアンサー1

まず、次の点に注意してください。

セキュリティの観点から見ると、それを使用するのは非常に悪いeval考えです。どのわからない場合はシェルスクリプト正確に何をしてください。 (それでも実際にこれが最善の解決策であることはほとんどありません。)シェルスクリプトの初心者としてevalEvenが存在することを忘れてください。

詳細については、次を参照してください。評価コマンドとセキュリティの問題


出力を取得するには、次のものをd使用できます。

eval echo \$${!a}

または:

eval eval echo \\\$\$$a

間違った部分は、エスケープされていない角かっこ文字をに渡すことですecho。前に引用符がない文字がある場合は、コマンドの$置き換えです。しかし、$引用された場合いいえ角かっこは有効なシェル構文ではありません。

おすすめ記事