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_文件。我按照您的建议删除了空格。因为您的解决方案与我的问题陈述不符。现在它非常有用。谢谢