在heredoc中禁用命令替换?

18 浏览
0 Comments

在heredoc中禁用命令替换?

如何在EOF heredoc中禁用命令替换?

#!/bin/bash
executableFile="executableFile.sh"
firstFolder="blablabla"
cat <<'EOF' >$executableFile
    secondFolder="blablabla2"
    if [ $(cat something) == "blub" ]; then
        echo $firstFolder
        echo $secondFolder
    fi
EOF

在执行executableFile时,应请求if语句中的值。

0
0 Comments

在使用heredoc时,有时候可能会遇到命令替换的问题。命令替换是指在命令中使用$(command)`command`的形式来执行一个命令,并将命令的输出结果插入到命令中。然而,在heredoc中,如果不加处理,命令替换会导致意外的结果。

解决这个问题的方法是,在heredoc中使用引号'EOF'来禁用命令替换,从而让heredoc保持原始文本的形式。引号将会禁用所有特殊字符,并将heredoc视为字面量。

下面是一个例子,展示了在heredoc中禁用命令替换的方法:

cat <<'EOF' >$executableFile
    secondFolder="blablabla2"
    if [ $(cat something) == "blub" ]; then
        echo $firstFolder
        echo $secondFolder
    fi
EOF

另外,为了保证代码的健壮性,推荐在heredoc中对变量的引用进行双引号括起来的处理。尽管不是必需的,但这是一个良好的习惯。

以下是在heredoc中使用双引号括起来的变量引用的示例:

cat <<'EOF' >"$executableFile"
    secondFolder="blablabla2"
    if [ "$(cat something)" == "blub" ]; then
        echo "$firstFolder"
        echo "$secondFolder"
    fi
EOF

通过这样的处理,我们可以避免命令替换导致的问题,并且使代码更加健壮可靠。

0