我需要一些帮助。我正试着做一些类似的事情
echo "{
"server":"$SERVER_HOST",
"server_port":"$SERVER_PORT",
"password":"$PASSWORD_CHOICE",
"timeout":$TIMEOUT_CHOICE
}" >> /etc/ss/example.json
我需要像一样的输出
{
"server":"127.0.0.1",
"server_port":80,
"password":"randompassword",
"timeout":60
}
但是输出总是像
{
server:127.0.0.1,
server_port:80,
password:randompassword,
timeout:60
}
不要使用echo
,而是将cat
与here文档一起使用:
cat >> /etc/ss/example.json <<EOF
{
"server":"$SERVER_HOST",
"server_port":"$SERVER_PORT",
"password":"$PASSWORD_CHOICE",
"timeout":$TIMEOUT_CHOICE
}
EOF
使用反斜杠放置特殊字符,如"
或n
用于下一行或t
用于选项卡
echo "this is my quotes -> " <-"
输出将是
this is my quotes -> " <-
您有两种方法:
- 在其他响应中已经回答的第一个问题是使用其他引号(如果您使用了
'
,则使用"
,反之亦然(,但如果您在外部使用'
,则通常会失去解释shell变量的可能性 - 第二个是去掉引号,并使用转义
\
字符来转义shell解释,如 - 在一些响应中评论的方法,即在引号内使用转义符,通常不会产生好的结果(根据使用的shell,转义符在单引号内,甚至在双引号内都不起作用(。最好的方法是退出引号,转义,然后再次插入引号,如下所示
- 使用
cat(1)
和使用<<
重定向流中输入的方法依赖于shell(并非所有shell都允许这样做,因此您必须小心(
echo "{
"""server""":"""$SERVER_HOST""",
"""server_port""":"""$SERVER_PORT""",
"""password""":"""$PASSWORD_CHOICE""",
"""timeout""":$TIMEOUT_CHOICE
}" >> /etc/ss/example.json
您只需要将字符串中的每个"
转换为"""
(如果您使用双引号为字符串加引号(。这同样适用于单引号(如果您使用单引号对字符串进行引号引用(,将每个'
转换为'''
。