2017-06-17 77 views
1

我自己對無法找到這樣看似微不足道的事情表示歉意。從shell腳本命令行讀取布爾參數的「無約束變量」

我需要通過多於一個的布爾參數到外殼腳本(擊)如下:

./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

你能澄清它是如何失敗嗎?是因爲你錯過了一個「轉變」嗎? –

+0

@GordonDavisson我試過了,沒有「shift」。 – Vlastimil

+0

你正在使用'set -u',對嗎? –

回答

4

當您使用set -u,這是一個錯誤取消引用的是一直沒有一個值明確任何變量分配。因此,您需要在腳本的頂部設置repeat=0(或repeat=false),或者在取消設置值時使用具有顯式默認行爲的取消引用方法;請參閱BashFAQ #112