如何将具有换行的字符串参数传递给bash文件,然后将完整的字符串传递给文件?

时间:2017-01-25 12:47:41

标签: string bash newline

我有一个字符串如下:

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

那么告诉我该如何做到并将结果如上所述?

3 个答案:

答案 0 :(得分:4)

建议使用printf而不是echoecho -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}的默认行为导致它们自动打印出来。)