我的if语句执行两个if而不仅仅是1
问题描述:
所以我在学习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
谁能帮助吗?
答
记住在if条件中需要有一个空格,否则它就成为一个赋值。 https://uvesway.wordpress.com/2013/03/11/some-whitespace-pitfalls-in-bash-programming/
答
"$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
是它的第一个位置参数。
使用'if [“$ y”=“n”]'。请注意[多余的空格](http://www.tldp.org/LDP/abs/html/comparison-ops.html#SCOMPARISON1)。 – Phylogenesis
非常感谢!我有时看到人们在=号之间放置空格,有时候不放。有什么不同? – Uranus
@Uranus我在下面回答了。如果你不使用空格,那么它就是一个赋值。 –