Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个bash快捷方式不起作用?_Bash_Shell - Fatal编程技术网

为什么这个bash快捷方式不起作用?

为什么这个bash快捷方式不起作用?,bash,shell,Bash,Shell,我有这样一个测试脚本: asdf() { return 1 } asdf && echo 123 && exit echo 321 输出的是321而不是123 为什么会这样?echo 123只会在如果asdf成功执行,因为您在asdf之后处理了短路操作--和&;现在您已经从函数asdf-ed中返回了return,返回值为1,这反过来成为asdf的退出状态,因此命令asdf被视为失败,因此echo 123(当然还有exit)永远不会运行 echo 321上没

我有这样一个测试脚本:

asdf() {
  return 1
}

asdf && echo 123 && exit
echo 321
输出的是321而不是123


为什么会这样?

echo 123
只会在如果
asdf
成功执行,因为您在
asdf
之后处理了短路操作--
和&
;现在您已经从函数
asdf
-ed中返回了
return
,返回值为1,这反过来成为
asdf
的退出状态,因此命令
asdf
被视为失败,因此
echo 123
(当然还有
exit
)永远不会运行


echo 321上没有这种条件,因此它是以通常的方式执行的。

运算符是逻辑AND。它执行延迟求值:如果左边的语句求值为
false
(即非零返回代码),则无论如何应用逻辑AND仍将求值为
false
,因此求值右边的部分是无用的(在逻辑谓词意义上)

由于函数返回1(
false
,就Bash而言),因此忽略右侧的所有内容,不会到达
exit
,并且执行
echo
语句

如果要强制执行该行上的所有命令,请改用此命令:

{ asdf ; echo 123 ; exit ; }

像这样的命令列表将始终计算它们中的每一个,而不管它们的返回代码如何。请注意,最后一个分号是必需的。

在讨论退出状态时,请尽量不要使用布尔术语
bash确实有一个上下文,其中布尔值用true表示为1,false表示为0,即算术表达式(try
echo$((3<5))
),因此最好保持真理和成功的概念不同。