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 ''