我编写了一个bash脚本,它自动为某些应用程序配置设置文件。
该应用程序使用与文件类似的语法/etc/sysconfig/network
,唯一的例外是它要求值用双引号括起来" "
。
所以脚本中的行看起来像这样,但我不知道如何允许 ip 地址的双引号内echo
:
echo " ipaddr="1.1.1.1" " > file
怎么做到呢?
我编写了一个bash脚本,它自动为某些应用程序配置设置文件。
该应用程序使用与文件类似的语法/etc/sysconfig/network
,唯一的例外是它要求值用双引号括起来" "
。
所以脚本中的行看起来像这样,但我不知道如何允许 ip 地址的双引号内echo
:
echo " ipaddr="1.1.1.1" " > file
怎么做到呢?
使用反斜杠字符转义引号或使用单引号:
echo "ipaddr=\"1.1.1.1\""
echo 'ipaddr="1.1.1.1"'
其他答案都提供了解决问题的绝佳方法。我只想添加一个 using printf
,这可以让事情变得舒适,例如,如果 IP 地址存储在一个变量中:
ip=1.1.1.1
printf 'ipaddr="%s"\n' "$ip" > file
但是在这里,与其他答案一样,您需要同时使用单引号和双引号。
在这种情况下事情会很舒服(仍然假设 ip 在变量中ip
),因为使用echo
而不是printf
,你必须使用:
echo "ipaddr=\"$ip\"" > file
# or
echo 'ip addr="'"$ip"'"' > file
(好吧,这没什么大不了的,但我通常比printf
bash 更喜欢)。echo
你至少有两个选择:
用单引号转义双引号:
echo ' ipaddr="1.1.1.1" ' > file
用反斜杠转义双引号:
echo "ipaddr=\"1.1.1.1\"" > file
通常,您可以使用反斜杠来转义任何单个字符;你可以使用一种类型的引用来逃避另一种。
你有选择:
您可以在回声的内部和外部使用不同的引号
echo "ipaddr='1.1.1.1'" > file
echo 'ipaddr="1.1.1.1"' > file
您可以转义引号:
echo "ipaddr=\"1.1.1.1\"" > file
或者你可以让它更简单(但引号上有转义):
echo ipaddr=\"1.1.1.1\" > file