我正在尝试将一个列表添加到已包含元素的bash数组的末尾,该数组包含{a..z},我想将{0..9}添加到该列表的末尾,I尝试了+ =并且这不起作用它在我的情况下清除了数组。
while [ ! $# -eq 0 ] # Argument selector for CLI input
do
case "$1" in
--num | -n)
chars=( {0..9} )
;;
--char | -c)
chars=( {a..z} )
;;
--upper-char | -C)
chars=( {A..Z} )
;;
--help | -h)
echo "Type the program name with an argument -n for numbers -c for lowercase char and -C for uppercase"
exit
;;
esac
case "$2" in
--num | -n)
chars[${#chars[@]}]=( {0..9} )
;;
--char | -c
chars[${#chars[@]}]=( {a..z} )
;;
--upper-char | -C)
chars[${#chars[@]}]=( {A..Z} )
;;
esac
shift
done
我希望在我弄清楚如何附加列表后再做第三个案例声明,最好的情况是每次我想添加项目时都不需要对数组进行硬编码。
答案 0 :(得分:0)
追加到数组 与+=
一起使用。
对你而言,由于代码中的其他错误,它似乎被覆盖了。这应该有效:
while [ ! $# -eq 0 ] # Argument selector for CLI input
do
case "$1" in
--num | -n)
chars=( {0..9} )
;;
--char | -c)
chars=( {a..z} )
;;
--upper-char | -C)
chars=( {A..Z} )
;;
--help | -h)
echo "Type the program name with an argument -n for numbers -c for lowercase char and -C for uppercase"
exit
;;
esac
case "$2" in
--num | -n)
chars+=( {0..9} )
;;
--char | -c)
chars+=( {a..z} )
;;
--upper-char | -C)
chars+=( {A..Z} )
;;
esac
shift 2
done
当它不适合你的时候,
我怀疑你只有shift
而不是shift 2
,
并期望script.sh -c -n
会为您提供a..z
和0..9
,
但它只给了0..9
。
发生的事情只发生在shift
之后,
在while
循环中仍有一个参数需要处理,
所以在下一次迭代chars
被chars=(...)
语句取代。
我建议这个替代实施:
chars=()
while [ $# != 0 ]; do
case "$1" in
--num | -n)
chars+=( {0..9} )
;;
--char | -c)
chars+=( {a..z} )
;;
--upper-char | -C)
chars+=( {A..Z} )
;;
--help | -h)
echo "Type the program name with an argument -n for numbers -c for lowercase char and -C for uppercase"
exit 1
;;
esac
shift
done