パラメータが拡張された関数をエクスポートする方法はありますか?

パラメータが拡張された関数をエクスポートする方法はありますか?

2つのファイルがあるとしましょう。メインディレクトリそしてサブディレクトリ以下を含む同じフォルダに:

メイン.sh:

#!/usr/bin/env bash

export PARAMETER="main"
my_func(){
  echo "$PARAMETER $1"
}
export -f my_func

# Run the other script
./sub.sh

サブ.sh:

#!/usr/bin/env bash

PARAMETER="sub"
my_func $PARAMETER

main.shを実行すると出力されますが、sub sub私はそうしたいと思いますmain sub

main.shで定義された関数がmain.shによって開始されたスクリプトでそのパラメータ名の使用を制限することなく、常にmain.shで宣言された値を使用するようにする方法はありますか?私は実際の問題にsub.shに似た機能がたくさんあるので、sub.shを修正する必要がないソリューションを探しています。

編集:
私の質問に回答しましたが、いくつかの背景情報は次のとおりです。
main.shドッカーイメージのエントリポイントスクリプトです。このエントリポイントは基本sub.sh的に大きなケース説明であり、$1スクリプトに重複したルーチンを再入力する必要がない
ようにユーティリティ関数を作成しようとしています。私はイメージにsub.shのようなスクリプトを追加する唯一の人ではないので、それに触れないようにします。他の開発者が知らなくてもツールを提供したいと思います。私の最初の考えは、その値を一意の名前を持つパラメータにコピーすることでした。これにより、機能が常に期待どおりに機能する可能性が高くなります。この時点で、パラメータが拡張関数をエクスポートできるかどうかを考えました。main.shsub.sh
PARAMETERmy_func_PARAMETER

ベストアンサー1

あなたはできます作るパラメータが拡張された関数です。後で(グローバルまたはサブシェルで)オーバーライドできるため、「拡張パラメータを使用してエクスポート」できます。

#!/usr/bin/env bash

export PARAMETER="main"

eval "my_func(){
  echo \"$PARAMETER \$1\"
}"

export -f my_func

# Run the other script
./sub.sh

または

#!/usr/bin/env bash

export PARAMETER="main"

my_func(){
  echo "$PARAMETER $1"
}

export -f my_func

# Run the other script
(
eval "my_func(){
  echo \"$PARAMETER \$1\"
}"

./sub.sh
)

明らかに、これはあまり意味がありません。変数の前の内容を使用するまで、変数は上書きされません。

#!/usr/bin/env bash

LOCAL_PARAMETER="sub"
my_func "$LOCAL_PARAMETER"

おすすめ記事