echo print" \ n" / bin / sh和/ bin / bash之间的区别

时间:2018-01-19 15:40:39

标签: linux bash shell dash-shell

我有一个shell脚本,它从cURL读取多行JSON字符串:

r=$(curl -H "X-Vault-Token: $VAULT_TOKEN" -fs $VAULT_ADDR/v1/$1)

如果我运行echo $r并使用/bin/sh执行脚本,我会看到JSON中的换行符被解释为换行符:

{"data": {"value": "foo
bar"}}

但是当我用/bin/bash执行脚本时,换行符是字面的:

{"data": {"value": "foo\nbar"}}

在使用/bin/sh/bin/bash时,我希望换行符为字面值。如何阻止/bin/sh解释换行符?

file -h /bin/sh
/bin/sh: symbolic link to dash

1 个答案:

答案 0 :(得分:5)

使用printf代替echo

printf '%s\n' "$r"

来自POSIX spec for echo

  

除非省略-n(作为第一个参数)和转义序列,否则无法在所有POSIX系统中使用echo。

强烈建议您完整阅读“应用程序使用”部分。