2016-11-11 101 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是它的第一个位置参数。