我为自己无法找到这样一个看似微不足道的事情而道歉。
我需要将多个布尔参数传递给shell脚本(Bash),如下所示:
./script --parameter1 --parameter2
等等。
如果设置,则全部视为true
。
在脚本的开头,我使用set -u
。
传递值的正常参数我目前按如下方式执行:
# this script accepts the following arguments:
# 1. mode
# 2. window
while [[ $# > 1 ]]
do
cmdline_argument="$1"
case $cmdline_argument in
-m|--mode)
mode="$2"
shift
;;
-w|--window)
window="$2"
shift
;;
esac
shift
done
我想添加类似
的内容 -r|--repeat)
repeat=true
shift
;;
我不明白为什么它不按预期工作。
它立即退出并出现错误:
./empire: line 450: repeat: unbound variable
第450行是:
if [ "$repeat" == true ];
答案 0 :(得分:6)
当您使用set -u
时,取消引用任何未明确赋值的变量是错误的。
因此,您需要在脚本的顶部设置repeat=0
(或repeat=false
),或者在取消设置值时使用具有显式默认行为的解除引用方法;见BashFAQ #112。