include.sh
#!/bin/bash -
export gg
f() {
for i in "${gg[@]}"
do
echo $i
done
}
run.sh
#!/bin/bash -
set -o nounset
. include.sh || exit 1
f
我收到此错误
scripts/include.sh: line 5: gg[@]: unbound variable
不是export
关键字应该使gg全局并且可以在任何地方使用吗?
如果没有,如何从include.sh
到处都可以使用gg?
更新
环境:
$ cat /etc/*-release
NAME="SLES"
VERSION="11.4"
VERSION_ID="11.4"
PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"
答案 0 :(得分:3)
旧版Unix shell不支持()
阵列。您应该使用bash
调用脚本,并且它们将按预期运行。
如更新后的问题中所述,您需要在导出之前定义gg
:
gg=()
export gg
我测试了补丁,它运行正常。
答案 1 :(得分:2)
如果source
文件(相当于.
),则命令在当前shell上下文中执行,因此不需要export
。但是,如果使用bash
,则使用unset / empty数组将导致set -o nounset
终止脚本。为数组指定一些值:
gg=(value1 value2) #can be assigned in both run.sh and/or include.sh
f() {
for i in "${gg[@]}"; do
echo "$i"
done
}
或使用参数扩展来处理:
f() {
for i in ${gg[@]+"${gg[@]}"}; do
echo "$i"
done
}
仅当设置${parameter+word}
时, word
才会展开为parameter
,否则无将被替换。如果您想了解更多有关数组如何使用数组的信息:wiki.bash-hackers.org。
如@CharlesDuffy所述,在bash 4.4
空数组中不会出现错误。即使没有作业array=()
也没有错误。有关更多信息,请参阅:
BashFAQ #112。