「ANSI-C」で変数から改行文字を渡すには?

「ANSI-C」で変数から改行文字を渡すには?

このコードを実行すると

#!/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%.}

次に、通常どおりに結果変数を使用します。

関連情報