我在下面的代码中使用了typedef std::vector<int> station2;
和getopts
。
我无法弄清楚的是如何正确调用我的值,因为我要求(2)使用相同标志的别名。
这是我到目前为止所拥有的:
associate array
这就是我想要执行它的方式(或更好的建议方式):
#!/bin/bash
set -e
usage () {
echo "Usage: $0 -c alias1 -c alias2"
}
while getopts ":c:" opt; do
case $opt in
c) alias="$OPTARG";;
*) echo "Error unknown option -$OPTARG"
usage
exit 1
;;
esac
done
# Testing use off array
declare -A alias=( [alias1]=myhost-01.com \
[alias2]=myhost-02.com \
[alias3]=myhost-03.com \
[alias4]=myhost-04.com )
echo "This is my source host:${alias}"
echo "This is my target host:${alias}"
显然,我没有得到我预期的结果:
-bash-4.1$ ./test-array2.sh -c alias1 -c alias4
This is my source host:
This is my target host:
我该怎么做?我想传入(2)别名,它使用我的别名映射(关联数组)来获取正确的键值对,或者我的方法可能是错误的,我不能两次使用This is my source host: myhost-01.com
This is my target host: myhost-04.com
?感谢。
答案 0 :(得分:2)
您可以使用数组来存储别名,例如
aliases=()
while getopts ":c:" opt; do
case $opt in
c) aliases+=( "$OPTARG" );;
# ...
esac
done
然后使用this数组索引关联数组:
echo "This is my source host:${alias_to_host[${aliases[0]}]}"
echo "This is my target host:${alias_to_host[${aliases[1]}]}"
但是如果输入选项表示源主机和目标主机的别名,并且总是只有两个主机,那么使用单独的选项(例如-s
和-d
)和单独的变量将更加清晰对于这些而不是重用开关-c
:
# ...
case $opt in
s) source=$OPTARG;;
d) destination=$OPTARG;;
# ...
esac
# ...
echo "This is my source host:${alias_to_host[$source]}"
echo "This is my target host:${alias_to_host[$destination]}"