我的if语句同时执行if而不是1

时间:2016-11-11 09:26:29

标签: bash unix if-statement

所以我正在学习Bash而且我不知道为什么我的if语句不起作用(如果它有任何不同,在putty中工作)。我已经尝试在线查看应该如何构建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 个答案:

答案 0 :(得分:0)

请记住,在if条件中需要有一个空格,否则它就变成了一个赋值。 https://uvesway.wordpress.com/2013/03/11/some-whitespace-pitfalls-in-bash-programming/

答案 1 :(得分:0)

"$y"="n" 既不是条件测试也不是作业。它只是一个字符串,例如,如果$y为'y',则"$y"="n"与文字'y=n'相同,并且此文字字符串被视为{{{}的单个参数1}}(test)命令。

以下条件总是评估为真:

[

而空字符串使其成为假:

if [ abcd ]; then echo true; fi
  

bash中的空格不是可选的(无处不在)。即使if [ '' ]; then echo true; else echo false; fi 看起来像一个语法,它也不是; [ abcd是一个命令([),test是它的第一个位置参数。