"未绑定的变量"从shell脚本命令行读取布尔参数

时间:2017-06-17 02:13:27

标签: bash shell parameter-passing

我为自己无法找到这样一个看似微不足道的事情而道歉。

我需要将多个布尔参数传递给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 ];

1 个答案:

答案 0 :(得分:6)

当您使用set -u时,取消引用任何未明确赋值的变量是错误的。

因此,您需要在脚本的顶部设置repeat=0(或repeat=false),或者在取消设置值时使用具有显式默认行为的解除引用方法;见BashFAQ #112