テキスト「-n」をエコーする方法

テキスト「-n」をエコーする方法

-nシェルに組み込まれたコマンドのみを使用してecho2文字の文字列をエコーすることは可能ですかbash

私はこれができることを知っていますが、組み込みの機能が文字列を出力できるかどうかをprintf '%s\n' -n知りたかったです。echo-n

答え1

-e8進数55を使用することは、次のことを意味します-

$ echo -e '\055n'
-n

...または8進数として156nまたは8進数の両方:

$ echo -e '\055\0156'
-n

これが-e面倒な場合は、常にバックスラッシュシーケンスを解釈するようにxpg_echoシェルオプションを設定しますecho(ただし、これは一般的に望むものではありません)。

$ shopt -s xpg_echo
$ echo '-\0156'
-n

inは16進数echobash認識します。

$ echo -e '\x2d\x6e'
-n

答え2

すべての回答に感謝します。今思いついたものを追加します。

echo -n -;echo n

答え3

" "-nの前に文字を配置し、\bモードで " "エスケープシーケンスを使用して-e最終出力から文字を削除します。次の例では、スペースをダミー文字として使用します。

$ echo -e " \b-n"
-n

説明する:

$ man echo
       If -e is in effect, the following sequences are recognized:
       \b     backspace

これにより、出力が端末に視覚的に印刷されます。

$ echo -e " \b-n" | tee /tmp/test
-n
$ cat /tmp/test
-n

ただし、出力を解析する必要がある場合は、見えないバックスペース文字が生成されるため、問題が発生する可能性があります。

$ echo -e " \b-n" | wc -c
5
$ wc -c <<< $(echo -e " \b-n")
5
$ echo -e "--" | wc -c
3

関連情報