"&&"完全等同于鱼壳中的"and"吗?



在鱼壳中,&&and的行为似乎相同。它们完全一样吗?它们的行为是否存在不同的边缘情况?

and/&&or/||not/!是一样的,除了运算符优先级和它们是否可以放在新行上。

想象:

echo 1 || echo 2; and echo 3

||首先绑定,因此echo 1 || echo 2被认为是一回事。它打印"1",这是成功的,所以它跳过打印&;2",然后因为||在整个成功打印&;3"。

,

echo 1; or echo 2 && echo 3

将只打印"1"。echo 1成功,因此其余部分被忽略。

还有";对于; and; or,可以用换行符替换,而&&||不能放在新行上(不转义前一行的末尾):

# valid
echo 1
and echo 2
# invalid
echo 1
&& echo 2
# valid - note the `` is the last thing on the line
echo 1 
&& echo 2

除了这些事情(和任何错误),它们是一样的。

虽然它们用于相同的事情,但它们在本质上是完全不同的:

sh&&是一个二进制操作符,它接受两个命令,运行第一个命令,只有当它成功时才运行第二个命令。退出状态为第一个命令的退出状态,如果失败,则为第二个命令的退出状态。

fishand是一个一元操作符,它接受单个命令,并在$status为0时运行该命令。如果运行,可以通过命令修改退出状态。

在这里你可以看到差异的大小:

$ fish -c 'and echo true'
true
$ sh -c '&& echo true'
sh: 1: Syntax error: "&&" unexpected

在这里你可以看到and如何操作一个不在它前面的命令:

$ fish -c 'false; set x 1; and echo true'
(no output)
$ sh -c 'false; x=1 && echo true'
true

相关内容

  • 没有找到相关文章