2015-05-20 43 views
0

我搜索如果不是命令,找到了很多具體命令的答案,但如果我想要的東西的任何命令,如何做到這一點?我想知道,如果沒有爲每個狀態扭轉它的結果的方式......不喜歡知道-eq和-ne ...條件如果不是一般的每個命令

我想要做的是不是這個

while [ -z ${!specificCommands[$d]} ] 

和不是這個

for ((d=1; d<=$qtyOfParamInACommand; d++)) 

試圖

for ((d=1; ![d<=$qtyOfParamInACommand]; d++)) 

,但結果並不如預期

所以不只是正常的,如果...這可能是簡單的語法。我會很感激這個命令的具體答案,但我的觀點是像C中那樣反轉!

+1

可能重複的[否定如果在bash腳本條件](http://stackoverflow.com/questions/26475358/negate-if-condition-in-bash-script ) – jurgemaister

+0

這對while命令也是一樣的嗎?或在一個命令的中間? 例如,對於這個問題,我將如何使中間的條件不成立,語法是否正確? ((d = 1; d <= $ qtyOfParamInACommand; d ++))) – Cher

+0

我們在談論哪種語言? – jurgemaister

回答

2

的反面:

while [ -z ${!specificCommands[$d]} ] 

或者是這些:

while ! [ -z ${!specificCommands[$d]} ] 
while [ -n ${!specificCommands[$d]} ] 

請注意,您還需要引用變量,或者使用這裏不需要引號雙括號。如果你不這樣做,當${!specificCommands[$d]}是空字符串時,你會遇到麻煩。

# better 
while ! [ -z "${!specificCommands[$d]}" ] 
while [ -n "${!specificCommands[$d]}" ] 

# best 
while ! [[ -z ${!specificCommands[$d]} ]] 
while [[ -n ${!specificCommands[$d]} ]] 

的否定:

for ((d = 1; d <= qtyOfParamInACommand; d++)) 

是:

# note: broken 
for ((d = 1; !(d <= qtyOfParamInACommand); d++)) 
for ((d = 1; d > qtyOfParamInACommand; d++)) 

注意,$不是((...))內必要的。

此外,實際上你不會否定條件,你會翻轉整個循環,所以它倒數。我上面寫的循環實際上是壞的。這是一個比較合適的「相反」:的

for ((d = qtyOfParamInACommand; d >= 1; d--)) 
+0

thx!我只是想知道,爲什麼不能在[]括號之間的條件?我會那些[]括號適用於附上任何一種情況? – Cher

+0

括號是一個非常具體的命令。 '['只是'test'命令的一個(很差的選擇,IMO)同義詞,它要求最後一個參數是']',以便它*看起來像語法。結果是幾代shell編程人員感到困惑,沒有任何實際的好處。 – chepner

+0

啊!然後我看到...所以如果我得到它,在for中,測試命令默認已經存在,所以不需要[] – Cher

相關問題