我有一个字符串如下:
variable="[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536"
"some_bash.sh", :arg=>variable
在some_bash.sh中,我将参数放入文件中,如下所示:
echo "$1" >> /etc/some_file
在我得到的文件中:
[name]
并且我得到错误10.12.02:找不到命令 name2:找不到命令 xyz:找不到命令 ip2:找不到命令
但我想要以下内容:
[name]
abc
[ip]
10.12.02
[name2]
xyz
[ip2]
2.3.536
那么告诉我该如何做到并将结果如上所述?
答案 0 :(得分:4)
建议使用printf
而不是echo
或echo -e
,因为它更便携。
虽然POSIX
描述了echo
的行为,但实际上它并不像它可能的那样便携。 echo的POSIX文档甚至建议“鼓励新应用程序使用printf而不是echo。”
在printf
内使用sampleScript.sh
,扩展字符串,启用转义序列的解释(\n
,\t
等。)。
#!/bin/bash
printf "$1\n" >> /etc/some_file
并将您的脚本传递给
./sampleScript.sh "[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536"
答案 1 :(得分:0)
您可以使用:
echo -e "$1" >> /tmp/samplefile
-e
- 启用反斜杠转义的解释
<强>测试强>
$ bash sample.sh 'some\ntext\nhere'
答案 2 :(得分:0)
替换此行:
echo "[name]\nabc\n[ip]10.12.02\n[name2]\nxyz\n[ip2]2.3.536"
这一行:
printf -v variable "[name]\nabc\n[ip]10.12.02\n[name2]\nxyz\n[ip2]2.3.536"
-v
的{{1}}选项会使名称所在的变量被赋值,而printf
会按照您编写的方式解释换行符。
作为一般规则,与printf
相比,printf
在不同的实现中会有更稳定的行为,但如果需要,则需要显式的换行符(而不是{{1}的默认行为导致它们自动打印出来。)