Короткий ответ: \
не всегда является особенным для bash
или echo
. Двойные кавычки сохраняют буквальное строковое значение всего внутри, кроме $
, `
, \
, а иногда и !
, Вне двойных кавычек, \
всегда особенный для bash: он сохраняет буквальное строковое значение следующего символа. Внутри кавычек обратная косая черта \
является специальной, если за ней следует один из пяти символов: $
, `
, "
, \
или символ новой строки. В первых четырех случаях он сохраняет буквальное строковое значение следующего символа. Для bash
версии echo \
никогда не бывает особенным, если не указан флаг -e
.
Итак, в ваших двух случаях, что происходит:
echo "\n"
в этом случае \
не сопровождается ни одним из пяти упомянутых символов, и поэтому обрабатывается как его буквальное строковое значение.
echo "\\n"
в этом случае за первым \
следует второй \
. Первое экранирует второе, поэтому оно интерпретируется как его буквальное строковое значение. Это бесполезно, так как в любом случае оно будет интерпретироваться как его буквальное строковое значение, но это может быть полезно, если вы хотите напечатать одну обратную косую черту в конце строки, как в:
echo "This is a single backslash:\\"
поскольку в противном случае обратная косая черта будет интерпретироваться оболочкой как выходящая "
.
Всю эту информацию можно почерпнуть из части справочной страницы bash
о двойных кавычках, которую можно найти здесь.