添え字で使用する関数をエクスポートするスクリプトがありますが、条件に応じてエクスポートした関数を変更したいと思います。条件付きで2つの異なる関数を宣言できることを知っていますが、可能であればそうしないことをお勧めします。
例は次のとおりです。
#!/bin/bash
foo () { echo foo; }
bar () { echo bar; }
if [[ $var == foo ]]; then
#in this case my_func() should execute foo()
export -f my_func
elif [[ $var == bar ]]; then
#in this case my_func() should execute bar()
export -f my_func
fi
my_func() { foo "$@"; }
条件付き内部のようにエクスポートする前に簡単な起動機能を作成することもできますが、これを行うより良い方法があるかどうかを尋ねています。
ベストアンサー1
おそらくこれがあなたが提案したものでしょう。しかし、もっと良い方法はないと思います。シェルは、事前に宣言された実際の宣言foo
や関数を宣言に含める安全な自己検査方法を提供しません。私はこれが代替案だと思います。またはの機能を移動したくない場合bar
my_func
foo
bar
入力する my_func
(つまり、別の関数にしfoo
たりbar
別の関数にしたりする必要はありません)。
#!/bin/bash
foo () { echo foo; }
bar () { echo bar; }
case $var in
foo) export -f foo; my_func () { foo "$@"; } ;;
bar) export -f bar; my_func () { bar "$@"; } ;;
esac
export -f my_func
つまり、値に基づいてvar
使用中の適切な関数をエクスポートし、my_func
関数を宣言します。次にエクスポートします。