ダブルクォートの中の変数展開は、どこまで正しく動作する?
たとえば、次のような形式で擬似 cp をシェルスクリプトで作成したとします。
#!/bin/sh
content=$(cat "$1")
printf '%s\n' "$content" > "$2"
これは、だいたいのケースで、第2引数のパスへと作成されたファイルの中身と、第1引数のパスで指定されていたもともとのファイルの差分はなくなると思っていますが、はたして、ありとあらゆるファイルに対してそれは成立するのか、と疑問に思いました。
質問
- 一旦変数で(標準)入力を受け取って、それをダブルクォートの中で変数展開してどこかに書き出す場合、その出力内容は、もともとの入力内容から、変化する場合はありますか?変化するとして、どのような場合に変化してしまうのでしょうか?