当我写:
echo 2*3>5 is a valid inequality
在我的bash终端中,在我的目录中创建了一个名为5
的新文件,其中包含:
2*3 is a valid inequality
我想知道这里到底发生了什么,为什么我得到这个输出? 我相信很明显我是Linux的新手! 感谢
答案 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"