このコードを実行すると
#!/bin/bash
set -x
http --json http://example.com \
value=$'hello\r\n\r\nworld'
stdoutにはキャリッジリターンが2つあります。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シェルで動作する必要があります):
escaped="hello\r\n\r\nworld"
raw=$(printf "%b" "$escaped")
ただし、コマンドの置換は最後の改行文字(存在する場合)を使用するため、末尾にダミー文字を追加および削除してこの問題を解決する必要があるかもしれません。
escaped="hello world\n"
raw=$(printf "%b." "$escaped")
raw=${raw%.}
次に、通常どおりに結果変数を使用します。