bash从这里运行脚本doc

时间:2019-03-16 09:13:29

标签: bash heredoc

在下面的代码中,变量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

是什么导致了这种不同?

1 个答案:

答案 0 :(得分:0)

您可以看到删除|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