Я замечаю поведение с концом строки '\ n', которого я не понимаю, и поэтому я предложил следующий «тест». Я на Mac OS X.
У меня есть файл с:
one two
three four five
six seven
Тогда я бегу
x=$(awk '{print}' filename.txt)
и
echo "$x"
печатает правильно (т.е. содержимое файла, как указано выше).
Однако, когда я делаю
y=$(echo $x | tr "\n" "N")
(я хочу перевести новую строку '\ n' в заглавную 'N', просто чтобы посмотреть, что произойдет), тогда я получу
one two three four five six sevenN
Кажется, что все вхождения '\ n', кроме последнего, обнаружены (поскольку вывод находится в одной строке), но не заменены на 'N', в то время как замена происходит для последнего экземпляра.
Последний символ (в конце файла) отличается от других символов новой строки?
Я не понимаю, что происходит.
EDIT
Я могу вспомнить одну разницу между последней строкой и другими. awk
видит один символ новой строки \n
в конце всех строк, кроме последней, и при печати добавляет еще одну такую новую строку. Поэтому мне нужно заменить новую строку double на N
.
С другой стороны, почему я не вижу два N
с?
В конце последней строки есть только один '\ n', и он заменяется на N
.
Это приближается к объяснению?