我如何使用包含""的值?回声?

时间:2013-06-23 17:30:48

标签: bash networking

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

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

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

echo " ipaddr="1.1.1.1" " > file

怎么做?

4 个答案:

答案 0 :(得分:4)

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

echo "ipaddr=\"1.1.1.1\""
echo 'ipaddr="1.1.1.1"'

答案 1 :(得分:2)

您至少有两个选择:

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

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

    echo "ipaddr=\"1.1.1.1\"" > file
    
  3. 通常,您可以使用反斜杠来转义任何单个字符;你可以使用一种报价来逃避另一种报价。

答案 2 :(得分:2)

其他答案都提供了解决问题的绝佳方法。我只想使用printf添加一个,如果将IP地址存储在变量中,可以使事情变得舒适:

ip=1.1.1.1

printf 'ipaddr="%s"\n' "$ip" > file

但在这里,与其他答案一样,你需要同时使用单引号和双引号。

在这种情况下情况会很舒服(仍然假设ip在变量ip中),因为使用echo代替printf,您必须使用以下任何一种:< / p>

echo "ipaddr=\"$ip\"" > file
# or
echo 'ip addr="'"$ip"'"' > file

(好吧,这不是什么大问题,但我通常比中的printfecho

答案 3 :(得分:1)

你有了选择:

你可以在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