我正在尝试正确链接&&
最后一个命令的退出代码。||
我遇到了一个我无法解释的奇怪行为。请帮忙。
这是我的exit-code.sh
测试脚本:
#!/bin/bash
echo "running exit-code with $1"
exit $1
这按预期工作:
$ ./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?
running exit-code with 1
last command exit code: 1
在()
子shell中运行它也是如此:
$ (./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?)
running exit-code with 1
last exit code: 1
但:
$ /bin/bash -c "./exit-code.sh 1 && ./exit-code.sh 2 && ./exit-code.sh 3 || echo last exit code: $?"
running exit-code with 1
last exit code: 0
为什么我在这里得到退出代码 0?
原因是使用双引号时,
$?
在将参数传递给新的 Bash 进程之前执行参数扩展(特殊参数的)。如果你打开调试和详细模式,你可以清楚地看到这一点:在这种情况下
$?
设置为是0
因为上一个命令(set -xv
在本例中)成功执行。引号
只需使用单引号