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)