我们有一个脚本,带有返回码。例如
#!/bin/bash
exit 42
这很好用:
$ ./script ; echo $?
42
但如果我去:
$ bash << EOF
./script ; echo $?
EOF
0
所以它打印0,而人们会期望它仍然打印42
答案 0 :(得分:6)
在执行脚本之前,您的$?
正在展开。如果您不希望变量在heredoc
(不是管道)中展开,请在名称周围加上单引号:
bash <<'EOF'
./script; echo $?
EOF
在将字符串传递给新的$?
命令时,会阻止bash
扩展。相反,它将在字符串中进行评估,这就是您的目标。