回声$?返回 0 而不是 1

回声$?返回 0 而不是 1
[root@server ~]# bash << eof
> cat adsfasdf
> echo $?
> eof
cat: adsfasdf: No such file or directory
0

谁能解释一下为什么它返回退出状态 0 而不是 1?

答案1

$?那是因为执行了变量扩展代码被传递给bash执行,因此echoed 退出代码是之前运行的命令 bash

bash-4.1$ ( exit 42 )

bash-4.1$ bash <<EOF
cat asdfasdf
echo $?
EOF
cat: asdfasdf: No such file or directory
42

只需单引号此处文档停止变量扩展的分隔符:

bash-4.1$ bash <<'EOF'
cat asdfasdf
echo $?
EOF
cat: asdfasdf: No such file or directory
1

相关内容