2013-01-24 80 views
2

Warninng:這可能是一個特定的機器問題或GNU bash,版本4.2.37(1)-release(x86_64-pc-linux-gnu)的問題更新,因爲我進一步檢查。更多Bash問題[如果語句總是評估爲false]

更新1:工程與GNU的bash,版本4.2.39。和GNU的bash,版本4.2.24

我的工作,詢問的問題bash腳本。我希望有一個通配符,如果陳述,但檢查用戶輸入否或只是n,但由於某種原因,它似乎不工作。

echo 'Is this a Personal Project? [y/n]' 
    read ORG_SWITCH 
echo 'Do you want to Open Source this project? [y/n]' 
    read PRIVATE 

,這裏是它輸出[if語句

if [[ $ORG_SWITCH == *"n"* ]] ; then 
    if [[ $PRIVATE == *"n"* ]] ; then 

錯誤:未找到[[:未找到

,我不知道爲什麼。我確實看到this,但嘗試了一些解決方案,但也許我只是不理解發生了什麼。

任何幫助,將不勝感激,並請隨時談下來。

+2

你開始'#!/ bin中/ bash'你的腳本? (如果你不這樣做,也許另一種sh'的'來運行它,沒有內置'[['?) –

+0

腳本有在頂部。實際上只是要發佈整個事情。但下面的簡化腳本也永遠不會驗證,所以我正在追蹤這個問題。 –

回答

0

您可以使用read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCH來避免使用echo並將用戶輸入限制爲一個字符(yn)。您也可以不[[ ]]對測試條件:

read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCH 
read -n1 -p "Do you want to Open Source this project? [y/n] " PRIVATE 

if [ "$ORG_SWITCH" = "n" ]; then 
    if [ "$PRIVATE" = "n" ]; then 
     echo "double no" 
    fi 
fi 

在一個支架條件([ ]),總是雙引號你的變量,因此,如果他們評價爲空,你的代碼將無法在語法錯誤

承擔
0

此代碼的工作就GNU bash, version 4.2.24

#!/bin/bash 
echo 'Is this a Personal Project? [y/n]' 
read ORG_SWITCH 

if [[ $ORG_SWITCH == *"n"* ]] ; then 
    echo "True $ORG_SWITCH" 
else 
    echo "False $ORG_SWITCH" 
fi 

echo 'Do you want to Open Source this project? [y/n]' 
read PRIVATE 
if [[ $PRIVATE == *"n"* ]] ; then 
    echo "True $PRIVATE" 
else 
    echo "False $PRIVATE" 
fi 

這是輸出

Is this a Personal Project? [y/n] 
no 
True no 
Do you want to Open Source this project? [y/n] 
no 
True no 

我錯過了什麼嗎?

+0

測試這一點,並得到相同的反應,因爲在我的bash GNU版本4.2.37(1)-release下(x86_64-PC-Linux的GNU)異常。我只是假設它是我的代碼,因爲通常我是鏈接中的弱鏈。 –

+0

此外,它可能是你不是[*實際*運行bash](http://stackoverflow.com/a/12230756/828193)。你正在用'./ scriptname.sh'執行腳本嗎? – user000001

+0

只是剛測試了一個新的VM.GNU bash,版本4.2.39。將繼續發佈更新,直到我到底。 –