sec*_*ded 8 linux bash shell io-redirection
我写的时候:
echo 2*3>5 is a valid inequality
Run Code Online (Sandbox Code Playgroud)
在我的bash终端中,5在我的目录中创建了一个名为的新文件,其中包含:
2*3 is a valid inequality
Run Code Online (Sandbox Code Playgroud)
我想知道这里到底发生了什么,为什么我得到这个输出?我相信我很熟悉Linux!谢谢
cxw*_*cxw 12
在bash中,重定向可以出现在行中的任何地方(但你不应该这样做!---请参阅bash-hackers教程).Bash将>5重定向作为重定向,创建输出文件5,然后处理其余参数.因此,echo 2*3 is a valid inequality会发生这种情况,它会为您提供输出文件中显示的输出5.
你可能想要的是什么
echo "2*3>5 is a valid inequality"
Run Code Online (Sandbox Code Playgroud)
要么
echo '2*3>5 is a valid inequality'
Run Code Online (Sandbox Code Playgroud)
(使用单引号),其中任何一个都将为您提供在命令行中指定为打印输出的消息.不同之处在于,""变量(例如$foo)将被填充,但不会填入''.
编辑:bash man页面说明了
重定向运算符可以在简单命令之前或出现在任何地方,也可以跟随命令.重定向按其出现的顺序从左到右处理.
bash首先进行输出重定向,即先>5完成,然后5创建一个名为的文件(如果已经存在则截断).结果文件描述符对于echo命令的运行时保持打开状态.
然后剩下的部分2*3 is a valid inequality作为参数运行echo,标准输出5最终保存在(已打开)文件中.
要将整个字符串作为输出,请使用单引号或双引号:
echo '2*3>5 is a valid inequality'
Run Code Online (Sandbox Code Playgroud)