如何将具有换行符的字符串参数传递给 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
而不是 echo
或 echo -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
以您编写它们的方式解释换行符。
作为一般规则,printf
与 echo
相比,在不同的实现中会有更稳定的行为,但如果您需要它们,将需要明确的换行符(而不是 [= 的默认行为16=] 导致它们被自动打印)。
我有一个字符串如下:
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
而不是 echo
或 echo -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
以您编写它们的方式解释换行符。
作为一般规则,printf
与 echo
相比,在不同的实现中会有更稳定的行为,但如果您需要它们,将需要明确的换行符(而不是 [= 的默认行为16=] 导致它们被自动打印)。