如何防止在回显文本中替换

How to prevent substitution in echoed text

我写了一个 bash 脚本,其中包含

IP=`/sbin/ifconfig eth0 | awk '/inet addr/{print substr(,6)}'`

我也为它写了一个安装程序:

echo "
echo "this is my script"
IP=`/sbin/ifconfig eth0 | awk '/inet addr/{print substr(,6)}'`
fi" > /tmp/myscript

然而,当我 运行 它并检查 myscript 文件时,它显示 IP=xxx.xxx.xxx.xxx 而不是变量。所以我假设我在某处遗漏了勾号或引号?

您需要在双引号内转义双引号和替换字符($`)或使用 here document(推荐):

cat >/tmp/myscript <<"END"
echo "this is my script"
IP=$( /sbin/ifconfig eth0 | awk '/inet addr/{print substr(,6)}' )
END

请注意,引用单词 END 会禁用此处文档中的命令和参数扩展。在此示例中,我使用了推荐的 $( ... ) 语法来进行命令扩展,而不是反引号 (`...`)。