echo "Hello " ; echo "world"
有什么区别和
echo "Hello " && echo "world"
两者似乎都可以运行命令彼此相继。
#1 楼
echo "Hello " ; echo "world"
意味着无论前面的命令echo "world"
的退出状态如何,即echo "Hello"
都将运行echo "world"
,无论命令echo "Hello"
的成功与否,都将运行echo "Hello " && echo "world"
。而对于echo "world"
,仅当echo "Hello"
第一个命令(q4312079q)成功(即退出状态0)。以下命令给出了Shell如何使用不同的运算符处理命令链接的示例:
$ false ; echo "OK"
OK
$ true ; echo "OK"
OK
$ false && echo "OK"
$ true && echo "OK"
OK
$ false || echo "OK"
OK
$ true || echo "OK"
$
评论
似乎没有人提到像大多数编程语言一样,“ &&”表示逻辑“ and”和“ ||”是逻辑“或”。不必评估第二个就知道“ false and what = false”,因此就不对其进行评估。这是几乎所有语言中逻辑运算符的标准行为-仅当第二个操作数的true / false值有所不同时才进行评估。副作用是,您可以编写诸如test && echo success ||之类的东西。回声失败。
–猎户座
15年2月28日在14:20
如果结果已经确定,则停止逻辑运算符评估的常见编程语言行为称为“短路”评估。
–将
16年2月10日在18:30
在按位的真实级别上-&&是乘法和||是加法运算,有助于保持操作优先级。例如true && false || true是1 * 0 +1,任何正数的结果都是真实的; 0为假
–肺炎
20-10-19在23:56
#2 楼
Linux中的每个命令完成运行后都会返回退出代码。退出代码已分配给特殊变量?
,因此您可以轻松检查上一条命令的状态,例如通过echo $?
。这通常在脚本中使用。如果命令成功完成,则返回退出代码0,而如果在执行过程中出现任何错误,则退出状态为非零。请参见下面的示例:$ echo "Hello" Hello $ echo $? 0 $ rm nonexistent-file rm: cannot remove ‘nonexistent-file’: No such file or directory $ echo $? 1
现在,这使我们想到了您的问题。
&&
是一个特殊的运算符,它表示``仅在上一个命令成功执行后才执行下一个命令,即以退出代码为零返回''。还有一个反向运算符||
,它仅在前一个命令失败(即以非零退出)时才执行以下命令。请参见下面的示例:$ echo "Hello" && echo "Previous command was successful" Hello Previous command was successful $ rm nonexistent-file && echo "This will not be printed" rm: cannot remove ‘nonexistent-file’: No such file or directory $ rm nonexistent-file || echo "But this will be shown" rm: cannot remove ‘nonexistent-file’: No such file or directory But this will be shown
编辑:该问题是关于
&&
和;
之间的区别,因此要得到完整答案,我需要添加一个分号一个命令从另一个。不会检查退出代码,因此如果您有多个用分号分隔的命令,它们将简单地顺序执行,即一个接一个地执行,彼此完全独立。评论
对于分号,返回状态是最后执行的命令的退出状态:gnu.org/software/bash/manual/html_node/Lists.html
–罗兰
20-4-9下午14:37
#3 楼
除了@heemayl的答案外,&&
(以及||
)将导致外壳程序仅处理所有链接命令的单个退出代码。因此,如果您有trap [...] ERR
或set -o errexit
行,它将在执行退出代码处理之前处理所有命令。
评论
在第二种情况下(&&),仅当且仅当echo“ Hello”返回退出状态为零时,才执行echo“ world”。为了说明差异,请尝试测试-f / etc / passwdx && echo hello与test -f / etc / passwdx;回声你好(您可以替换所需的任何文件,现有或不存在)。
尽管我同意所引用的另一个问题在技术上可能是该问题的重复,但我认为该问题的措词对Linux的新用户有用得多,他们没有经验或知识来搜索“控制”和重定向运算符”。
gnu.org/software/bash/manual/html_node/Lists.html