Двойная кавычка и строка префикса доллара в оболочке

В вопросе Как выполнить ssh-keygen без подсказка Я обнаружил, что они используют строку здесь следующим образом:

""$'\n'"y"

Зачем им двойная кавычка перед $? Кажется, $'\n'y равно этому:

bash$ cat - <<< ""$'\n'"y" | od -c
0000000 \n y \n
0000003
bash$ cat - <<< $'\n'y | od -c
0000000 \n y \n
0000003 

person leopay    schedule 30.07.2021    source источник
comment
Я отредактировал связанный ответ, чтобы удалить совершенно ненужные "".   -  person chepner    schedule 30.07.2021
comment
@chepner спасибо, я не уверен, что они имеют какое-то особое значение в двойных кавычках   -  person leopay    schedule 30.07.2021
comment
У них нет. Кавычки просто выполняют массовое экранирование: "foo" совпадает с \f\o\o. Если в кавычках нечего скрывать, они не нужны.   -  person chepner    schedule 30.07.2021
comment
Ваш предыдущий комментарий с выводом od был удален после того, как информация была отредактирована в вопросе. Если вы недовольны этим изменением, отредактируйте его снова самостоятельно. В любом случае, пожалуйста, не используйте комментарии, чтобы уточнить или изменить свой вопрос; вот почему вы можете редактировать его. Как видите, код в комментариях имеет серьезные проблемы с форматированием.   -  person tripleee    schedule 30.07.2021


Ответы (1)


Нет причины; пустая строка в двойных кавычках совершенно не нужна.

Оболочка использует кавычки для группировки токенов, которые в противном случае были бы разделены. token точно эквивалентен ""token или "token" (или """"""""""token или """t"o"k"e"n" и т. д., если хотите) после удаления кавычек.

Единственное место, где вам действительно нужна пустая строка, — это когда аргумент должен быть строкой нулевой длины (например, printf '%s\n' "first line" "" "third line", где предпоследний аргумент — пустая строка), хотя иногда это также может быть полезно для устранения неоднозначности ("$HOMEdir" отличается от "$HOME""dir", где первый пытается расширить переменную, чье имя состоит из семи символов; хотя обычно вы используете "${HOME}dir", чтобы сделать это различие).


(Несколько смежных кавычек не имеют значения для оболочки; """" — это просто пустая строка "" рядом с пустой строкой "".)

person tripleee    schedule 30.07.2021
comment
Если это решило вашу проблему, подумайте о том, чтобы проголосовать и/или принять ее. Если вы предпочитаете, вы можете опубликовать свой собственный ответ и принять его. Принятие ответа поможет будущим посетителям отметить вашу проблему как решенную. См. также справку. - person tripleee; 01.08.2021
comment
Если нет, не могли бы вы уточнить в комментарии, что вы все еще ищете? - person tripleee; 01.08.2021