如果我运行这段代码
#!/bin/bash
set -x
http --json http://example.com \
value=$'hello\r\n\r\nworld'
我在标准输出中有两个回车符value
http --json http://example.com 'value=hello
world'
但是,如果我value
在变量中有字符串,我找不到在标准输出中获取相同字符串的方法。例如,如果我运行
#!/bin/bash
set -x
variable="hello\r\n\r\nworld"
http --json http://example.com \
value=$''"$variable"''
我没有换行符而是\r\n\r\n
字符
http --json http://example.com 'value=hello\r\n\r\nworld'
如何从变量内的值开始换行?
我无法更改variable="hello\r\n\r\nworld"
,但我可以在它和命令运行之间添加代码。
答案1
对我来说就是这样
#!/bin/bash
set -x
variable="hello\r\n\r\nworld"
http --json http://example.com \
value="${variable@E}"
答案2
要么在变量赋值中使用$'...'
,如
variable=$'hello\r\n\r\nworld'
代替
variable="hello\r\n\r\nworld"
或者用于printf
处理转义符(这应该在任何 POSIXy shell 中工作):
escaped="hello\r\n\r\nworld"
raw=$(printf "%b" "$escaped")
但请注意,命令替换会吃掉最后的换行符(如果有的话),因此您可能必须通过在末尾添加和删除虚拟字符来解决这个问题:
escaped="hello world\n"
raw=$(printf "%b." "$escaped")
raw=${raw%.}
然后照常使用结果变量。