bash" echo"包括">"在中间创建文件 - 请解释

时间:2016-06-03 20:28:04

标签: linux bash shell io-redirection

当我写:

echo 2*3>5 is a valid inequality

在我的bash终端中,在我的目录中创建了一个名为5的新文件,其中包含:

2*3 is a valid inequality

我想知道这里到底发生了什么,为什么我得到这个输出? 我相信很明显我是Linux的新手! 感谢

3 个答案:

答案 0 :(得分:12)

在bash中,重定向可以出现在行中的任何位置(但你不应该这样做!---见the bash-hackers tutorial)。 Bash将>5作为重定向,创建输出文件5,然后处理其余参数。因此,echo 2*3 is a valid inequality会发生,它会为您提供输出文件5中显示的输出。

你可能想要的是

echo "2*3>5 is a valid inequality"

echo '2*3>5 is a valid inequality'

(使用单引号),其中任何一个都会为您提供在命令行中指定为打印输出的消息。不同之处在于,在""内,变量(例如$foo)将被填充,但不会填入''

修改bash man page表示

  

重定向运算符可以在简单命令之前或出现在任何位置,也可以跟随命令。重定向按其出现的顺序从左到右处理。

答案 1 :(得分:7)

bash首先执行输出重定向,即首先完成>5并创建名为5的文件(如果已存在则截断)。生成的文件描述符对于echo命令的运行时保持打开状态。

然后剩余部分2*3 is a valid inequality作为echo的参数运行,标准输出最终保存在(已打开)文件5中。

要将整个字符串作为输出,请使用单引号或双引号:

echo '2*3>5 is a valid inequality'

答案 2 :(得分:3)

这是output redirection的一个例子。您正在指示echo语句,而不是写入标准输出,写入文件名。该文件名恰好是“5”。

您可以通过引用来避免这种行为:

echo "2*3>5 is a valid inequality"