2016-11-11 136 views
2

所以我在學習Bash,我不知道爲什麼我的if語句不工作(如果它有什麼區別,在putty中工作)。我已經嘗試在網上尋找if聲明應該如何構建,並遵循它確保我得到的所有細節正確。當我運行它無論是if的的問世正和他們都得到執行,而不是僅僅1我的if語句執行兩個if而不僅僅是1

echo -n "Enter file name: " 
read x 

echo "file $x with numbers (Y/N)?" 
read y 

if [ "$y"="n" ]; 
then 
     cat $x 
fi 

if [ "$y"="y" ]; 
then 
     cat -n $x 
fi 

exit 

誰能幫助嗎?

+2

使用'if [「$ y」=「n」]'。請注意[多餘的空格](http://www.tldp.org/LDP/abs/html/comparison-ops.html#SCOMPARISON1)。 – Phylogenesis

+0

非常感謝!我有時看到人們在=號之間放置空格,有時候不放。有什麼不同? – Uranus

+0

@Uranus我在下面回答了。如果你不使用空格,那麼它就是一個賦值。 –

回答

0

"$y"="n"既不是條件測試也不是轉讓。它只是單個字符串,例如,如果$y是'y',那麼"$y"="n"與字面'y=n'相同,並且該字面字符串被視爲test[)命令的單個參數。

像下面的條件總是被判斷爲真:

if [ abcd ]; then echo true; fi 

而一個空字符串使得假:

if [ '' ]; then echo true; else echo false; fi 

白色空間是不可選在bash(無處不在)。即使[ abcd thingy看起來像一個語法,它不是; [是命令(test),abcd是它的第一個位置參數。