2
[ -f /tmp/myfile.txt ] && echo "File exists" || echo "No such file"

这是如何运作的?特别是&&和的评价||

4

2 回答 2

5

&&并且||是控制运算符,根据先前命令的退出状态确定是否应执行以下命令。来自man (1) bash

控制运算符 && 和 || 分别表示 AND 列表和 OR 列表。AND 列表具有以下形式

  command1 && command2

当且仅当 command1 返回退出状态为零时,才会执行 command2。

OR 列表具有以下形式

  command1 || command2

当且仅当 command1 返回非零退出状态时,才会执行 command2。AND 和 OR 列表的返回状态是列表中执行的最后一个命令的退出状态。

[, 或,如果命令通过测试,则test返回零退出状态。来自help test

test: test [expr] 根据 EXPR 的评估,退出状态为 0(真)或 1(假)。

所以当你这样做时

[ -f /tmp/myfile.txt ] && echo foo || echo bar

您真正要说的是(请仔细阅读此内容)如果文件存在,则回显 foo。如果文件不存在echo foo命令失败,回显 bar。

if…then这是这些控制操作符和命令之间微妙但关键的区别。

于 2013-01-23T16:09:43.260 回答
0

基本思想是从左到右运行

首先它评估 -f /tmp/myfile.txt 如果文件存在并且是文件则为真

接下来它尝试评估 && ,它接受一个左右参数。这是一个合乎逻辑的“和”

它从左到右进行惰性评估,因此如果文件测试为真,那么它会检查 echo 命令是否为真,它通过执行它来完成。大概在 shell 世界中“真”意味着它以零退出代码正常执行

如果文件测试或回显( && 的两个参数)中的任何一个为假,则 && 的输出为假,并将其传递到右侧

|| 是一个逻辑“或”,也有一个左右参数。如果左边的 arg 为真,那么它会停在那里,因为它是惰性的

如果左侧 arg 为假(文件不存在),则运行右侧 arg

于 2013-01-23T16:15:32.210 回答