1

我编写了一个脚本,它自动为某些应用程序配置设置文件。

该应用程序使用与文件类似的语法/etc/sysconfig/network,唯一的例外是它要求值用双引号括起来" "

所以脚本中的行看起来像这样,但我不知道如何允许 ip 地址的双引号内echo

echo " ipaddr="1.1.1.1" " > file

怎么做到呢?

4

4 回答 4

4

使用反斜杠字符转义引号或使用单引号:

echo "ipaddr=\"1.1.1.1\""
echo 'ipaddr="1.1.1.1"'
于 2013-06-23T17:33:28.927 回答
2

其他答案都提供了解决问题的绝佳方法。我只想添加一个 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

(好吧,这没什么大不了的,但我通常比printfbash 更)。echo

于 2013-06-23T17:42:40.580 回答
2

你至少有两个选择:

  1. 用单引号转义双引号:

    echo ' ipaddr="1.1.1.1" ' > file
    
  2. 用反斜杠转义双引号:

    echo "ipaddr=\"1.1.1.1\"" > file
    

通常,您可以使用反斜杠来转义任何单个字符;你可以使用一种类型的引用来逃避另一种。

于 2013-06-23T17:34:03.897 回答
1

你有选择:

您可以在回声的内部和外部使用不同的引号

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
于 2013-06-23T17:33:52.940 回答