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

Mou*_*inX 5 bash echo variable-substitution here-document

我在使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

iru*_*var 6

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

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

echo 10
echo $DONOTREPLACE
Run Code Online (Sandbox Code Playgroud)