Bash命令 XOR ^ 另一个命令

6
在下面的示例中:
w ^ ls

“异或”操作符在shell中的预期行为是什么?
因此,当我们输入
command ^ anothercommand

如果执行的话,是什么触发anothercommand运行?


2
如果它像 &&|| 这样的运算符,它必须运行两个命令,因为 XOR 的值由其两个操作数决定(它不会短路)。如果一个命令失败而另一个成功,则结果退出状态将为 0,否则为 1。我真的想象不出这会有什么有用的场景。 - chepner
2个回答

9
正如您在man bash中所看到的那样,^并不用于分隔命令,而是用于算术表达式中。
$ echo $(( 5 ^ 9 ))
12

这是因为

dec     bin
 5     0101
 9     1001
-----------
12     1100

我当时真的以为它会根据命令的退出代码(每个命令返回值的异或)来工作,基于 OP 的意图,我太傻了! - Inian
1
@AK_: 是的,你也可以尝试 w % idw +-+ id 或其他任何方式。没有名为 ^ 的用户,所以你只会得到标题。在bash中没有用于命令的 ^ 运算符。 - choroba
1
在稍微不同的上下文中,^ 是一个历史扩展操作符。尝试输入 echo foo,然后输入 ^foo^bar - chepner
1
@chepner:没错。但它仍然不能连接命令。它也可以用于将变量值大写或否定字符类。 - choroba
2
我不明白一个不存在的运算符怎么会引起安全问题。 - chepner
显示剩余7条评论

7
如果你输入command ^ anothercommand,那么你只是为 command提供了两个参数:^anothercommand。这里没有运算符。 只有当command将那个参数视为命令名称并尝试运行它时,anothercommand才会运行。

你能提供一个接受 ^ 作为参数的命令的例子吗? - AK_
2
@AK_: 是的,例如 echo ^ - choroba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接