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

How to pass a string argument having new line to bash file and then passing the complete string to a file?

我有一个字符串如下:

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 "" >> /etc/some_file

在我得到的文件中:

[name]

而且我还收到 10.12.02 错误:找不到命令 name2:找不到命令 xyz:找不到命令 ip2:找不到命令

但我想要如下内容:

[name]
abc
[ip]
10.12.02
[name2]
xyz
[ip2]
2.3.536

那么请告诉我我该怎么做并在文件中得到上面的结果?

你可以使用这个:

echo -e "" >> /tmp/samplefile

-e - 启用对反斜杠转义的解释

测试:

$ bash sample.sh 'some\ntext\nhere'

建议使用 printf 而不是 echoecho -e,因为它更便携。

虽然 POSIX 描述了 echo 的行为,但实际上它的可移植性不如预期。 POSIX echo even recommends that "New applications are encouraged to use printf 的文档,而不是 echo。"

sampleScript.sh 中使用 printf 来扩展字符串,启用转义序列的解释(\n\t 等)。

#!/bin/bash
printf "\n" >> /etc/some_file

并将您的脚本作为

传递给它
./sampleScript.sh "[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536"

替换此行:

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"

printf-v 选项导致名称后面的变量被赋值,并且 printf 以您编写它们的方式解释换行符。

作为一般规则,printfecho 相比,在不同的实现中会有更稳定的行为,但如果您需要它们,将需要明确的换行符(而不是 [= 的默认行为16=] 导致它们被自动打印)。