我有一个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
答案 0 :(得分:5)
使用printf
代替echo
。
printf '%s\n' "$r"
除非省略-n(作为第一个参数)和转义序列,否则无法在所有POSIX系统中使用echo。
强烈建议您完整阅读“应用程序使用”部分。