Bash
如何以“ANSI-C”方式從變數傳遞換行符?
如果我執行此程式碼
#!/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"
,但我可以在它和命令執行之間添加程式碼。
對我來說的方式是
#!/bin/bash set -x variable="hello\r\n\r\nworld" http --json http://example.com \ value="${variable@E}"
$'...'
在變數賦值中使用,如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%.}
然後像往常一樣使用結果變數。