shell 未绑定变量

zc0qhyus  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(209)

这是一个错误,我没有找到任何关于后,无情的搜索
我正在尝试在EC2示例(EMR群集v6.4.0的一部分)中运行引导文件。由于引导操作需要的时间超过5分钟,因此我们将其作为以下形式的子进程执行

#!/bin/bash

var="var"
cat << EOF > ~/bootstrap.sh
intra="intra"
echo $var
echo $intra
EOF
/bin/bash ~/bootstrap.sh
exit 0

但是var“intra”从未被设置,引导操作返回错误行n:内部:未绑定变量
如果你执行这个脚本,“内部”变量不会被打印出来。为什么我不能在子进程中分配变量呢?谢谢!

3yhwsihp

3yhwsihp1#

当使用该类型的heredoc(<<WORD)时,必须使用\$对文字$字符进行转义。反勾号字符(′)也是如此:

#!/bin/bash
var="var"
cat << EOF > ~/bootstrap.sh
intra="intra"
echo $var
echo \$intra
EOF
/bin/bash ~/bootstrap.sh
exit 0

生成等效引导脚本的另一种方法是使用字面heredoc形式<<'WORD'

#!/bin/bash
var="var"

# This line will be inserted as-is without variable and subshell expansion:
cat << 'EOF1' > ~/bootstrap.sh
intra="intra"
EOF1

# We will allow this ONE line to expand.
cat << EOF2 >> ~/bootstrap.sh
echo $var
EOF2

# Back to literal insertions, no escaping necessary.
cat << 'EOF3' >> ~/bootstrap.sh
echo $intra
EOF3
/bin/bash ~/bootstrap.sh
exit 0

检查~/bootstrap.sh的内容是开始调试的好地方。

相关问题