не понимаю обратную косую черту в новой строке в двойных кавычках bash

не понимаю обратную косую черту в новой строке в двойных кавычках bash

в соответствии сдокументация gnu,

Обратная косая черта сохраняет свое особое значение только в том случае, если за ней следует один из следующих символов: '$', '`', '"', '\' или новая строка. В двойных кавычках обратная косая черта, за которой следует один из этих символов, удаляется.

Я пытался

p="a\$b";echo $p  # a$b
p="a\`b";echo $p  # a`b
p="a\"b";echo $p  # a"b
p="a\\b";echo $p  # a\b

все ок. Но новая строка??

p="a\newlineb";echo $p  # a\newlineb

Что означает новая строка в документе?

решение1

Newline — это название символа новой строки, т.е. символа, который \nв языке C обычно записывается как:

$ p="a\
b"; echo "$p"
ab

Результатом является abто, что вместо\a<newline>b того, чтобыСтандарт POSIX гласит::

A <backslash>, который не заключен в кавычки, сохраняет буквальное значение следующего символа, за исключением a <newline>. Если a <newline>следует за , <backslash>оболочка интерпретирует это как продолжение строки. <backslash>and <newline>должны быть удалены перед разделением ввода на токены. Поскольку экранированный символ <newline>полностью удаляется из ввода и не заменяется никаким пробелом, он не может служить разделителем токенов.

Но строкаявляетсявзято в двойные кавычки... Ну, это особый случай:

Символ <backslash>сохраняет свое особое значение в качестве экранированного символа только в том случае, если за ним следует один из следующих символов, считающихся особыми: $, `, ", \, <newline>.

Таким образом, строка в двойных кавычках означает, что обратная косая черта-новая строка интерпретируется так, как если бы она быланетвообще не заключено в кавычки, то есть действует как продолжение строки, а обратная косая черта и символ новой строки удаляются.

Обратите внимание, что это происходит в момент присвоения переменной pзначения, а не когда вы echoее используете.

Смотрите такжеПоследствия для безопасности, если забыть заключить переменную в кавычки в оболочках bash/POSIXо необходимости всегда заключать переменные в кавычки.

Связанный контент