echo 在 /bin/sh 和 /bin/bash 之间以不同方式打印“\n”
echo prints "\n" differently between /bin/sh and /bin/bash
我有一个 shell 脚本,它从 cURL 中读取多行 JSON 字符串:
r=$(curl -H "X-Vault-Token: $VAULT_TOKEN" -fs $VAULT_ADDR/v1/)
如果我 运行 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
使用 printf
而不是 echo
。
printf '%s\n' "$r"
It is not possible to use echo portably across all POSIX systems unless both -n (as the first argument) and escape sequences are omitted.
强烈建议完整阅读“应用程序使用”部分。
我有一个 shell 脚本,它从 cURL 中读取多行 JSON 字符串:
r=$(curl -H "X-Vault-Token: $VAULT_TOKEN" -fs $VAULT_ADDR/v1/)
如果我 运行 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
使用 printf
而不是 echo
。
printf '%s\n' "$r"
It is not possible to use echo portably across all POSIX systems unless both -n (as the first argument) and escape sequences are omitted.
强烈建议完整阅读“应用程序使用”部分。