ダッシュのエコーによるバックスラッシュ拡張の防止

ダッシュのエコーによるバックスラッシュ拡張の防止

正確に次の内容でファイルを生成することから始めてください。

a\nb

このファイルに名前を付けてfoo次のコマンドを実行すると、ファイルの正確な内容が印刷されます。

bash -c 'bar=$(cat foo);echo "$bar"'

shしかし、代わりに実行すると、bash結果は次のようになります。

a
b

ここでの問題は、\n私が望んでいない改行文字に変換されることです。

マイコンピュータはデフォルトで組み込みLinuxが組み込まれているターゲットコンピュータshに設定されているため、非常に単純で、notと非常によく似ています。dashashbusyboxdashbash

これを実行するとsh -c 'cat foo'期待した結果が得られますが、変数の中に入れたいです。どうすればいいですか?

答え1

実際、シェルはコマンドを分岐して実行します。ただし、(組み込みコマンドではなく)コマンドが実行されるたびにシェルが分岐します。これはシェルが機能する方法なので、避けられません。

注:シェルは何も翻訳しません。このechoコマンドは機能します。ただし、以下を使用できますprintf

your_shell -c 'bar=$(cat foo); printf %s "$bar"'

関連情報