回声 $? 返回 0 而不是 1

use*_*416 4 bash shell-script

[root@server ~]# bash << eof
> cat adsfasdf
> echo $?
> eof
cat: adsfasdf: No such file or directory
0
Run Code Online (Sandbox Code Playgroud)

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

man*_*ork 11

那是因为在将代码传递给$?执行之前执行了变量扩展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
Run Code Online (Sandbox Code Playgroud)

只需单引号here-document分隔符即可停止变量扩展:

bash-4.1$ bash <<'EOF'
cat asdfasdf
echo $?
EOF
cat: asdfasdf: No such file or directory
1
Run Code Online (Sandbox Code Playgroud)