【问题标题】:bash command XOR ^ anothercommandbash 命令异或 ^ 另一个命令
【发布时间】:2017-07-19 05:38:43
【问题描述】:

在下面的例子中:

w ^ ls

shell 中 XOR 运算符的预期行为是什么?

所以当我们进入

command ^ anothercommand

什么触发anothercommand 运行(如果它会执行)?

【问题讨论】:

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

标签: linux bash operators delimiter logical-operators


【解决方案1】:

如果您输入command ^ anothercommand,您只需为command 提供两个参数,^anothercommand。这里没有操作员。 anothercommand 只会在 command 决定将该参数视为命令名称并尝试运行它时运行。

【讨论】:

  • 您能否提供一个接受 ^ 作为参数的命令示例?
  • @AK_:是的,例如echo ^
【解决方案2】:

正如您在man bash 中看到的,^ 不用于分隔命令,而是在算术表达式中使用。

$ echo $(( 5 ^ 9 ))
12

那是因为

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

【讨论】:

  • 老实说,它会根据命令的退出代码(每个命令的返回值的异或)工作,基于 OP 的意图,我傻了!
  • @AK_:是的,您也可以尝试w % idw +-+ id 或其他任何方式。没有名为^ 的用户,所以你只得到了标题。 bash 中没有用于命令的 ^ 运算符。
  • 在稍微不同的上下文中,^ 是一个历史扩展运算符。试试echo foo,然后是^foo^bar
  • @chepner:是的。但是,它仍然没有连接命令。它还可以用于大写变量值或否定字符类。
  • 我不明白一个不存在的操作员如何导致安全问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多