回声在/ bin / sh和/ bin / bash之间打印“ \ n”有所不同

Geo*_*son 2 linux bash shell dash-shell

我有一个Shell脚本,可以从cURL读取多行JSON字符串:

r=$(curl -H "X-Vault-Token: $VAULT_TOKEN" -fs $VAULT_ADDR/v1/$1)
Run Code Online (Sandbox Code Playgroud)

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

{"data": {"value": "foo
bar"}}
Run Code Online (Sandbox Code Playgroud)

但是当我使用/bin/bash换行符执行脚本时,它们是原义的:

{"data": {"value": "foo\nbar"}}
Run Code Online (Sandbox Code Playgroud)

我希望在使用/bin/sh和时,换行符是原义的/bin/bash。如何停止/bin/sh解释换行符?

file -h /bin/sh
/bin/sh: symbolic link to dash
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

使用printf代替echo

printf '%s\n' "$r"
Run Code Online (Sandbox Code Playgroud)

POSIX规范中echo

除非-n(作为第一个参数)和转义序列都被省略,否则不可能在所有POSIX系统上移植使用echo。

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