ファイルにバイナリコンテンツを追加するシェルスクリプトを作成しています。私は次のコマンドを試しました。
echo -en '\x61\x62\x63..' >> /tmp/myfile
しかし、結果は次のようになります。
-en \x61\x62\x63..
毎回すべてのコンテンツを削除せずにファイルにコンテンツを追加する方法はありますか?
ノート
システムでこれを実行しようとしています。ただはい/bin/sh
、このコマンドは正しく機能しますbash
が、デフォルトのシェルを使用すると機能しません。
答え1
Bashにはecho
組み込み関数があるため、この動作が発生します。shには組み込まれていません。良いシェンさまざまな組み込みの「echo」コマンドを使用してください。
/bin/echo
だから、使用しない代わりに試してみてください/bin/
。
答え2
移植性にこだわりたいなら使えないエコまたは印刷機能、どちらも指定されていないエスケープシーケンスを\xXX
POSIX定義として扱います。
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..