bashは、$'string'
拡張を許可します。私のman bash
さんの言葉:
$'string'
の言葉は特別に扱われます。 単語はstring
に展開され、バックスラッシュエスケープ文字はANSI C標準の指定に従って置き換えられます。次のように バックスラッシュエスケープシーケンスは、存在する場合、復号化される:
\a
アラート(ベル)
\b
バックスペース
\e
\E
エスケープ文字
\f
改
\n
改行
\r
復帰
\t
水平タブ
\v
垂直タブ
\
バックスラッシュ
\'
単一引用符
\"
二重引用符
\nnn
値である8進値nnn
(1〜3桁)8ビット文字
\xHH
8ビット文字値は16進数値HH
(1桁または2桁の16進数)
\cx
コントロール -x
文字ドル記号が存在していなかったかのように拡張された結果は、単一引用符で囲まれています。
しかしなぜbashヌル文字に$'\0'
と$'\x0'
を変換しないのですか?
これは文書化されていますか?理由はありますか?
> hexdump -c < <(echo -e '_\x0\x1\x2\x3_')
0000000 _ \0 001 002 003 _ \n
0000007
私のbashのバージョンecho $'foo\0bar'
が動作しないのはなぜ
$ bash --version | head -n 1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
:(?それは機能や制限、あるいはバグです)
$ hexdump -c <<< _$'\0'$'\x1\x2\x3\x4_'
0000000 _ 001 002 003 004 _ \n
0000007
echo
は、期待される結果を与えますとしてecho -e 'foo\0bar'
?
良い質問!多分それはPosixのことですか?がんばろう。 – shellter
すべての答えをありがとう。 netcatを使用してSGCIインターフェースをサーバーにテストしているときに、同じ問題が発生しています。 SCGIヘッダーにはNUL文字があります。ここで、特にパイプの使用を提案した後、私は回避策を開発しました。私はNUL文字を必要とする8進数の377(ASCII 255)を使用し、それをnetcat xmlreq = '<?xml version = "1.0" encoding = "UTF-8"にパイプする直前にtrを通してパイプしますか?> system.client_version 'scgihdr = CONTENT_LENGTH $' \ 377 '$ {#のxmlreq} $' \ 377'SCGI $ '\ 377'1 $は' \ 377' $ {#1 scgihdr –