bash将管道中的值返回bash

Dav*_*ijn 0 bash pipe

我们有一个脚本,带有返回码.例如

#!/bin/bash
exit 42
Run Code Online (Sandbox Code Playgroud)

哪个工作正常:

$ ./script ; echo $?
42
Run Code Online (Sandbox Code Playgroud)

但如果我去:

$ bash << EOF
./script ; echo $?
EOF
0
Run Code Online (Sandbox Code Playgroud)

所以它打印0,而人们会期望它仍然打印42

Eri*_*ouf 6

$?在执行脚本之前,您正在扩展.如果您不希望变量在heredoc(不是管道)中展开,请在名称周围放置单引号:

bash <<'EOF'
./script; echo $?
EOF
Run Code Online (Sandbox Code Playgroud)

这会阻止$?在将字符串传递给新bash命令时进行扩展.相反,它将在字符串中进行评估,这就是您的目标.