我想将我的数组转储给用户,以便他们可以看到映射的样子。我试着用这句话printf '%s\n' "${cluster_to_endpoint[@]}"
尝试将其转储到下面的使用函数中,但是我没有得到我预期的输出。
正在进行的代码:
#!/bin/bash
set -e
usage () {
echo "Usage: $0 -o oldcluster -n newcluster"
printf '%s\n' "${cluster_to_endpoint[@]}"
}
while getopts ":o:n:" opt; do
case $opt in
o) old="$OPTARG";;
n) new="$OPTARG";;
*) usage
exit 1
;;
esac
done
# Mapping
declare -A cluster_to_endpoint=(
[c1]=foobar2-01.us-east-1.my.com
[c2]=foobar2-02.us-east-1.my.com
[c3]=foobar2-03.us-east-1.my.com
[c4]=foobar2-04.us-east-1.my.com)
# Echo info
echo "Source cluster:${cluster_to_endpoint[$old]}"
echo "Target cluster:${cluster_to_endpoint[$new]}"
输出:
-bash-4.1$ ./tst.sh -h
Usage: ./tst.sh -o oldcluster -n newcluster
期待:
Usage: ./tst.sh -o oldcluster -n newcluster
[c1]=foobar2-01.us-east-1.my.com
[c2]=foobar2-02.us-east-1.my.com
[c3]=foobar2-03.us-east-1.my.com
[c4]=foobar2-04.us-east-1.my.com
答案 0 :(得分:3)
代码从上到下执行,当它进入while循环时,调用usage,它会尝试打印你的数组但尚未初始化。
在对任何访问权限之前放置声明语句。
答案 1 :(得分:1)
在初始化数组usage
之前,您正在调用cluster_to_endpoint
shell函数。
在处理命令行之前将declare
语句移动到。
除此之外,数组中的下标必须求值为整数值,因此不能像c1
那样等。 编辑显然,这就是你在Bash版本4+中执行关联数组的方法。较旧的Bash需要使用带有整数下标的普通数组(declare -a
)。