如何防止在回显文本中替换
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
会禁用此处文档中的命令和参数扩展。在此示例中,我使用了推荐的 $( ... )
语法来进行命令扩展,而不是反引号 (`...`
)。
我写了一个 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
会禁用此处文档中的命令和参数扩展。在此示例中,我使用了推荐的 $( ... )
语法来进行命令扩展,而不是反引号 (`...`
)。