2013-08-01 20 views
0

我試過這個SO後的代碼 - How to evaluate a boolean variable in an if block in bash?,它不起作用。看起來BASH中沒有布爾值。有沒有完美的解決方法可以讓我在BASH中設置和檢查布爾值?Bash腳本 - 布爾在if塊?

我的代碼 -

#!/bin/bash 
flag=true 
if [ $flag ] 
echo 'True' 
#flag=false 
#echo 'Now changed to false' 
fi 

即使標誌=第2行假,輸出仍然是正確的。爲什麼?

+0

請參閱Jens在提供的鏈接中回答。如果$ myVar;那麼......;邏輯似乎有安全缺陷。 – Steam

回答

3

它的計算結果爲真實的,因爲 '人測試' 的這一部分 -

[ expression ] 
     string  True if string is not the null string. 

你需要使用類似 -

#!/bin/bash 
flag=1 
if [ ${flag} -eq 1 ] 
then 
    echo 'True' 
    #flag=0 
    #echo 'Now changed to false' 
fi 
+0

順便說一句,你爲什麼把{}括號中的標誌?我們不能做「$ flag」== 1嗎? – Steam

+0

'$ {flag}'和'$ flag'是一樣的。不過,您不應該在這裏使用雙引號和'==',因爲您要進行數字比較,而不是字符串比較。 –

+0

@AnsgarWiechers - 謝謝。但是,是不是數字和字符串在這裏比較相同的東西?我們只是創建一個標誌並檢查其狀態。 – Steam

10

嘗試不使用方括號,這樣

#!/bin/bash 
flag=true 
if $flag ; then 
    echo 'True' 
    #flag=false 
    #echo 'Now changed to false' 
fi 
+1

+1正確答案。還要注意,在腳本的第一行是「#!」,而不是「!#」。 –

+0

括號和無括號之間的區別是什麼? – Steam

+1

沒有括號,它會嘗試執行該值作爲命令。它在這裏工作,因爲'true'命令返回true,'false'命令返回false。你也可以設置'flag =「rm -r/*」',並讓條件刪除你所有的文件。 –