评估嵌套猫中的 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'
而不是每个单独的一个。
我有一个 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'
而不是每个单独的一个。