evalを使用してbash関数を動的に定義する

evalを使用してbash関数を動的に定義する

次のコードを使用してbash関数を動的に定義しようとしています。

delegate_function() { echo "output from delegate"; }
eval "parent_function() { echo $(delegate_function); }"

目的は、実行時に親関数がデリゲートに動的に渡されるようにすることです。しかし、evalどのように機能するかによって、私の機能は次のように定義されます。

kshitiz:/tmp$ type parent_function
parent_function is a function
parent_function () 
{ 
    echo output from delegate
}

定義を次のように変更するにはどうすればよいですか?

 parent_function () 
 { 
     echo $(delegate_function);
 }

評価される文字列の特定の部分を防ぐ方法はありますかeval

ベストアンサー1

Bashでは、ほとんどの言語と同様にevalこれを避ける必要があります。たとえば、Greg のよくある質問をご覧ください。評価コマンドとセキュリティの問題

parent_function次のように定義できます。

parent_function=delegate_function

parent_functiondispatch を使いたいときはいつでも、delegate_function以下を実行してください:

$ $parent_function
output from delegate

動的機能更新の例

定義delegate_functionしてparent_function実行してみましょう$parent_function

$ delegate_function() { echo "delegate version 1"; }
$ parent_function=delegate_function
$ $parent_function
delegate version 1

delegate_functionそれでは、変更してやり直してみましょう$parent_function

$ delegate_function() { echo "delegate version 2"; }
$ $parent_function
delegate version 2

$parent_function新しいバージョンのDelegate_functionを実行するには、今すぐ更新してください。

名前を動的に選択する例

デリゲート関数を作成しましょう。

$ delegate_function() { echo "delegate function executed"; }

いくつかの名前を付けてみましょう。

$ parent_function=some_name

次に、この名前の動的割り当てを見てみましょう。

$ typeset $parent_function=delegate_function
$ $some_name
delegate function executed

おすすめ記事