"&&" 是否完全等同于 fish shell 中的 "and"?
is "&&" exactly equivalent to "and" in fish shell?
在 fish shell 中,&&
和 and
似乎表现相同。它们完全一样吗?是否存在它们表现不同的极端情况?
虽然它们用于同一件事,但它们在根本上是完全不同的:
sh &&
是一个二元运算符,它接受两个命令,运行s 第一个,只有成功时,运行s 第二个。如果失败则退出状态为第一个命令,否则为第二个命令。
fish and
是一个接受单个命令的一元运算符,如果 $status
为 0,则 运行s 它。退出状态可选择由命令修改,如果 运行.
在这里你可以看到数量上的差异:
$ 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
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
成功,因此其余部分将被忽略。
还有“;” for ; 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
除了那些东西(和任何错误),这些都是一样的。
在 fish shell 中,&&
和 and
似乎表现相同。它们完全一样吗?是否存在它们表现不同的极端情况?
虽然它们用于同一件事,但它们在根本上是完全不同的:
sh &&
是一个二元运算符,它接受两个命令,运行s 第一个,只有成功时,运行s 第二个。如果失败则退出状态为第一个命令,否则为第二个命令。
fish and
是一个接受单个命令的一元运算符,如果 $status
为 0,则 运行s 它。退出状态可选择由命令修改,如果 运行.
在这里你可以看到数量上的差异:
$ 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
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
成功,因此其余部分将被忽略。
还有“;” for ; 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
除了那些东西(和任何错误),这些都是一样的。