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)
使用printf代替echo。
printf '%s\n' "$r"
Run Code Online (Sandbox Code Playgroud)
除非-n(作为第一个参数)和转义序列都被省略,否则不可能在所有POSIX系统上移植使用echo。
强烈建议您完整阅读“应用程序使用情况”部分。