別の名前でエクスポートされた関数

別の名前でエクスポートされた関数

添え字で使用する関数をエクスポートするスクリプトがありますが、条件に応じてエクスポートした関数を変更したいと思います。条件付きで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や関数を宣言に含める安全な自己検査方法を提供しません。私はこれが代替案だと思います。またはの機能を移動したくない場合barmy_funcfoobar 入力する 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関数を宣言します。次にエクスポートします。

おすすめ記事