特定の変数を「インポートする」方法

特定の変数を「インポートする」方法

2つのbashスクリプトがあるとしましょう。

プロバイダ.sh、いくつかのプロセスを実行して「露出」する必要がありますMAPが、A次のいずれも実行しないでくださいB

#!/bin/bash
declare -A MAP
A=hello
B=world
MAP[hello]=world

消費者.sh、実行され、Provider.shの使用が必要ですMAP

#!/bin/bash
source ./Provider.sh
echo ${MAP[hello]}  # >>> world

環境を最大限に整理するために、Provider.sh可視性をできるだけ低くしたいと思いましたConsumer.sh。 MAPだけを「ソース」にするにはどうすればよいですか?

ベストアンサー1

関数を使用して変数の範囲を決定できます。例:

## Provider.sh
# Global vars
declare -A map

# Wrap the rest of Provider.sh in a function

provider() {

    # Local vars only available in this function
    declare a=hello b=world c d


    # Global vars are available
    map[hello]=world

}

provider "$@"    # Execute function, pass on any positional parameters

# Remove function
unset -f provider

$ cat Consumer.sh
. ./Provider.sh
echo "${map[hello]}"
echo "$a"
$ bash -x Consumer.sh
+ . ./Provider.sh
++ declare -A map
++ provider
++ declare a=hello b=world c d
++ map[hello]=world
++ unset -f provider
+ echo world
world
+ echo ''

おすすめ記事