我正在运行 Linux 3.10.0-693.2.2.el7.x86_64,我一生都无法弄清楚为什么会发生这种情况。这似乎是一个错误,shellchecker 没有发现任何问题。
#!/bin/bash
set -o nounset
### functions
options=(one two three)
select var in "${options[@]}"; do
# make sure it is a valid choice
if (( REPLY <= ${#options[@]} )) && [[ $REPLY =~ ^[0-9]+$ ]]; then
case $var in
one) exit;;
two) df -h /tmp;;
*) echo $var;;
esac
break
else
printf "Invalid selection.\n" >&2
fi
Run Code Online (Sandbox Code Playgroud)
我使用 set -xv 进行故障排除,但这是没有它的输出。在生产中,options[@] 将由命令设置,并且它们返回的数字将是动态的。所以我希望菜单在 $var 上执行 *) 中的命令——但我必须检查 REPLY 中的越界选择。这是输出。
$ bad_select.bash
1) one
2) two
3) three
#? 4 …Run Code Online (Sandbox Code Playgroud)