这个问题在这里已有答案:
在下面的代码中,变量X正常输出。
# cat a.sh
X=world
echo 'hello' $X
# cat a.sh | bash
hello world
但是,使用此处doc,不显示变量X.
# cat <<EOF | bash
> X=world
> echo 'hello' $X
> EOF
hello
# bash -s <<EOF
> X=world
> echo 'hello' $X
> EOF
hello
是什么造成了这种差异
你可以看到当你删除|bash
时会发生什么
X=oldvalue
cat <<EOF
X=world
echo "hello $X"
EOF
$X
在更换为bash之前被替换。
您可以查看以下内容
X=oldvalue
cat <<"EOF"
X=world
echo "hello $X"
EOF
这是你想要执行的:
cat <<"EOF" | bash
X=world
echo "hello $X"
EOF