String 如何将具有新行的字符串参数传递给bash文件,然后将完整的字符串传递给文件?
我有一个字符串,如下所示:String 如何将具有新行的字符串参数传递给bash文件,然后将完整的字符串传递给文件?,string,bash,newline,String,Bash,Newline,我有一个字符串,如下所示: variable="[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536" "some_bash.sh", :arg=>variable echo "$1" >> /etc/some_file 在some_bash.sh中,我将参数放入文件中,如下所示: variable="[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.53
variable="[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536"
"some_bash.sh", :arg=>variable
echo "$1" >> /etc/some_file
在some_bash.sh中,我将参数放入文件中,如下所示:
variable="[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536"
"some_bash.sh", :arg=>variable
echo "$1" >> /etc/some_file
在该文件中,我得到以下信息:
[name]
[name]
abc
[ip]
10.12.02
[name2]
xyz
[ip2]
2.3.536
我还得到了错误10.12.02:command not found
名称2:找不到命令
xyz:找不到命令
ip2:找不到命令
但我想要如下的东西:
[name]
[name]
abc
[ip]
10.12.02
[name2]
xyz
[ip2]
2.3.536
那么,请告诉我如何做到这一点,并将上述结果保存在一个文件中?您可以使用以下方法:
echo -e "$1" >> /tmp/samplefile
-e
-启用反斜杠转义的解释
测试:
$ bash sample.sh 'some\ntext\nhere'
建议在
echo
或echo-e
上使用printf
,因为它更便于携带
虽然POSIX
描述了echo
的行为,但实际上它并没有像它可能的那样便携。POSIX文档甚至建议“鼓励使用新的应用程序,而不是echo。”
在sampleScript.sh
中使用printf
展开字符串,启用转义序列的解释(\n
,\t
等)
并将其作为脚本传递
./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"
这一行:
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
具有更稳定的行为,但如果需要,则需要显式换行符(而不是导致自动打印它们的默认行为)。不,它对我不起作用我做了$bash sample.sh'[some]\ntext\n[此处]\nothertext'刚获得:[some]作为output@Inian按照建议更新了问题您已经在bash脚本中使用了变量,但是在我的例子中,我需要将完整的字符串作为参数传递给bash,作为:sample.sh:args=>“[name]\nabc\n[ip]\n10.12.02\n[name2]\nxyz\n[ip2]\n2.3.536”和samle.sh:echo“$1”内部>>/etc/some_文件。我按照您的建议删除了空格。因为您的解决方案与我的问题陈述不符。现在它非常有用。谢谢