/bin/sh - echo >> 演算子が期待どおりに動作しません。

/bin/sh - echo >> 演算子が期待どおりに動作しません。

ファイルにバイナリコンテンツを追加するシェルスクリプトを作成しています。私は次のコマンドを試しました。

echo -en '\x61\x62\x63..' >> /tmp/myfile

しかし、結果は次のようになります。

-en \x61\x62\x63..

毎回すべてのコンテンツを削除せずにファイルにコンテンツを追加する方法はありますか?

ノート

システムでこれを実行しようとしています。ただはい/bin/sh、このコマンドは正しく機能しますbashが、デフォルトのシェルを使用すると機能しません。

答え1

Bashにはecho組み込み関数があるため、この動作が発生します。shには組み込まれていません。良いシェンさまざまな組み込みの「echo」コマンドを使用してください。

/bin/echoだから、使用しない代わりに試してみてください/bin/

答え2

移植性にこだわりたいなら使えないエコまたは印刷機能、どちらも指定されていないエスケープシーケンスを\xXXPOSIX定義として扱います。

GNUシステムでも、動作はecho組み込まれているか/bin/echo変更される可能性があります。あなたは試すことができます:

$ POSIXLY_CORRECT=1 /bin/echo -en '\x61'
-en \x61

$ env BASHOPTS=xpg_echo POSIXLY_CORRECT=1 bash -c "echo -en '\x61'"
-en a

(読む必要があります。これ詳細は)。

標準のPOSIXツールボックスでは、次のものを使用できますawk

$ awk 'BEGIN{printf "%c%c%c..", 97, 98, 99}'
abc..

関連情報