使用 bash 脚本输出新脚本:需要替换和不替换的变量的混合

使用 bash 脚本输出新脚本:需要替换和不替换的变量的混合

我在 bash 变量替换方面遇到问题。这是我正在尝试做的一个愚蠢的例子。我需要从 bash 脚本输出一个新脚本。一行(参见echo我的示例)混合了不应替换的变量和应替换的变量。

#!/bin/bash
REPLACE=`whoami`
cat << EOF > mynewscript.sh
    read DONTREPLACE < /home/$REPLACE/localinput.txt
    echo $DONTREPLACE > /home/$REPLACE/somefile.log
EOF
exit 0

这不是一个真实的例子,但它确实说明了问题。假设我需要提前知道绝对路径,并且我希望在原始脚本中评估 $REPLACE。但我不希望在我的脚本中评估/替换 $DONTREPLACE 。$DONTREPLACE应该与新脚本的输出完全相同。

因此,在制作此处文档时引用“EOF”是行不通的。

我希望我能很好地解释这一点。

我不知道还有其他解决方案。我很欣赏任何想法,但我更喜欢非常简单的想法/解决方案。它不必很优雅。

答案1

您应该使用\来转义$前面的DONOTREPLACE。请参阅下面的示例和输出

REPLACE=10
DONOTREPLACE=20
cat <<EOF
> echo $REPLACE
> echo \$DONOTREPLACE
> EOF

echo 10
echo $DONOTREPLACE

答案2

我认为,如果您使用 bash,更好的解决方案是转义“EOF”标记。像这样:

cat > mytest << \EOF
$HOME
EOF

cat mytest
$HOME

相关内容