为什么不正确地使用<&燃气轮机;在if-in-bash语句中创建文件?

为什么不正确地使用<&燃气轮机;在if-in-bash语句中创建文件?,bash,if-statement,Bash,If Statement,我错误地使用了不相等比较来检查两个变量: if [ "2.57" <> "5" ] then echo "Banana" fi if[“2.57”“5”] 然后 回声“香蕉” fi 这是错误的,正如我现在知道的(-ne未使用) 但我的问题是,为什么它会创建一个名为5(第二个比较器)的空文件?我知道echo Hello>文件将创建它,但这里没有echo 发生这种情况的原因是什么?[是一个命令,而不是语法;它是test的同义词。因此,实际上不是一个参数,而是一个重定向操作符。您的

我错误地使用了
不相等比较来检查两个变量:

if [ "2.57" <> "5" ]
then
  echo "Banana"
fi
if[“2.57”“5”]
然后
回声“香蕉”
fi
这是错误的,正如我现在知道的(
-ne
未使用

但我的问题是,为什么它会创建一个名为
5
(第二个比较器)的空文件?我知道
echo Hello>文件将创建它,但这里没有echo


发生这种情况的原因是什么?

[
是一个命令,而不是语法;它是
test
的同义词。因此,
实际上不是一个参数,而是一个重定向操作符。您的命令相当于

if test "2.56" <> "5"
then
if [ "2.57" ] <> "5"
重定向操作符通常放在所有参数之后,但是对于一个简单的命令,它可以出现在命令行的任何地方,甚至在命令本身之前

if <> "5" [ "2.57" ]; then
if [ <> "5" "2.57" ]; then
如果为“5”[“2.57”];则
如果[“5”“2.57”];则

(“]”必须是带有
“[“
”的最终参数,以进一步增强语法错觉。)

你试过键入这个吗?
>5
没有
echo
,文件仍然被创建…Bash做什么的方法?截断文件?它不是Bash特有的,它可以在任何POSIX shell中工作。通过截断,我的意思是用
O_TRUNC
标志打开:因此,如果文件不存在,那么它就被创建了,但如果它已经存在是的,它被截断了。很好,谢谢你花时间向新手解释!