誰かがecho
の動作を理解するのを手伝ってくれますか? Ubuntuで次のコマンドを試しています。
$ echo -e \xaa
xaa
$ echo -e "\xaa"
▒
$
ご覧のように、二重引用符を使用すると、16進数を出力している間、出力はごみになります。 -e
は、\n
を改行やその他のシーケンスに解釈するのに役立つことがわかっています。 -e
オプションを使用したエコーが16進数を処理する方法を理解したいだけです。
引用符がないと、\x
はシェルによって解析されてx
になります。
$ printf "%s\n" echo -e \xaa
echo
-e
xaa
$ printf "%s\n" echo -e "\xaa"
echo
-e
\xaa
man bash
、セクションQUOTING
を参照してください:
A non-quoted backslash (\) is the escape character. It preserves the
literal value of the next character that follows, with the exception of
<newline>. If a \<newline> pair appears, and the backslash is not
itself quoted, the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).
あなたのgrep
は誤解を招くものです:
$ man echo | grep -o \xHH
xHH
grep -o
は、grep
が\
を受け取ったことがないことを示す、一致した文字を正確に出力します。
/bin/echo
またはenv echo
を実行しない限り、シェルの組み込みecho
が実行されます。したがって、ドキュメントを確認する場合は、help echo
を実行するか、man bash
を確認してください。 man echo
は/bin/echo
用です:
$ echo --help
--help
$ env echo --help
Usage: echo [SHORT-OPTION]... [STRING]...
or: echo LONG-OPTION
Echo the STRING(s) to standard output.
-n do not output the trailing newline
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
--help display this help and exit
--version output version information and exit
If -e is in effect, the following sequences are recognised:
\\ backslash
...
man bash
、セクションShell BUITLIN COMMANDS
を参照してください。
echo interprets the following escape sequences:
\a alert (bell)
\b backspace
\c suppress further output
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value
nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal
value HH (one or two hex digits)