评估嵌套猫中的 bash 个变量

evaluate bash variables in nested cat

我有一个 shell 脚本看起来像

#/bin/bash

file=File1.sh

cat > ${file} << EOF
file2=subCat
cat > ${file2} << END
echo hello
END

EOF

生成 File1.sh 内容为:


file2=subCat

cat> << END
echo hello
END

如何让 ${file2} 在输出文件中被评估为 subCat

这里有一个更简单的方法来重现您的问题:

echo "var=foo"
echo $var

它什么都不输出而不是 foo。这是因为输出带等号的值和实际赋值是不一样的

你问的可以先给变量赋值,而不是输出:

#/bin/bash

file=File1.sh
file2=subCat

cat > ${file} << EOF
cat > ${file2} << END
echo hello
END
EOF

这将使 File1.sh 包含

cat > subCat << END
echo hello
END

您可能应该问的是如何在 File1.sh 中进行扩展。您可以通过转义扩展来做到这一点:

#/bin/bash

file=File1.sh

cat > ${file} << EOF
file2=subCat
cat > ${file2} << END
echo hello
END
EOF

这将使 File1.sh 包含

file2=subCat
cat > ${file2} << END
echo hello
END

如果您希望所有扩展都在脚本中发生,您也可以简单地引用 'EOF' 而不是每个单独的一个。