Почему echo $ '\ n' печатает 2 новые строки? - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь изучить сценарии оболочки и наткнулся на ANSI-C Цитирование . Я понимаю, что экранированные от обратной последовательности последовательности будут декодированы стандартом ANSI-C. По ссылке echo $'\n' должен печатать один символ новой строки. Я не могу понять, почему echo $'\n' печатает 2 символа новой строки?

Ответы [ 2 ]

5 голосов
/ 12 октября 2019

Давайте обратимся к некоторой документации:

С posix echo :

Утилита echo записывает свои аргументы в стандартный вывод, после чего следует .

Один аргумент дан echo. Аргументом является $'\n' - который декодируется как новая строка. Таким образом, echo печатает его аргумент - новую строку, за которой следует новая строка - итого две новые строки.

0 голосов
/ 12 октября 2019

Причина в том, что echo записывает вывод с завершающим символом новой строки.

Если вы делаете strace, вы можете увидеть это в системном вызове write: -

$ strace -e write echo $'\n'
write(1, "\n", 1
)                       = 1
write(1, "\n", 1
)                       = 1

В соответствии с руководством вы можете отключить это, используя переключатель -n: -

$ strace -e write echo -n $'\n'
write(1, "\n", 1
)                       = 1
...