Как сообщить bash, что строка продолжается на следующей строке
101
В сценарии bash, который я получил от другого программиста, длина некоторых строк превышала 80 столбцов. Какой символ или предмет нужно добавить в строку, чтобы указать, что строка продолжается на следующей строке?
Символ обратной косой черты '\' может использоваться для удаления какого-либо специального значения для следующего прочитанного символа и для продолжения строки.
Спасибо. и каков обычный лимит столбцов в сценарии bash?
Открой путь
bash не имеет интересного ограничения столбца; для ясности вы должны попытаться ограничить до 70-80 символов на столбец.
Habbie
9
@RyanM Обратная косая черта должна быть самым последним символом перед символом конца строки. Вы УВЕРЕНЫ, что у вас нет пробелов после \?
Джордж
9
@ Джордж. Еще немного возни, и вы увидите ошибку с файлом ^M. Проблема, похоже, в том, что сценарий был мне предоставлен кем-то, кто использует окна. Быстро dos2unixисправил :)
RyanM
2
@ Джордж, ваш комментарий только что спас меня, у меня был пробел после \, и я не мог понять, что не так. Ура!
Ffledgling
37
Как правило, вы можете использовать обратную косую черту в конце строки, чтобы команда продолжила работу до следующей строки. Однако бывают случаи, когда команды неявно продолжаются, а именно, когда строка заканчивается токеном, который не может законно завершить команду. В этом случае оболочка знает, что будет еще больше, и обратную косую черту можно опустить. Некоторые примеры:
# In general
$ echo "foo" \>"bar"
foo bar# Pipes
$ echo foo |> cat
foo# && and ||
$ echo foo &&> echo bar
foo
bar
$ false ||> echo bar
bar
Другое, но родственное - это неявное продолжение внутри кавычек. В этом случае без обратной косой черты вы просто добавляете новую строку в строку.
$ x="foo
> bar"
$ echo "$x"
foo
bar
С помощью обратной косой черты вы снова разделяете логическую строку на несколько логических строк.
Есть ли формальный список таких ситуаций, когда команда неявно продолжается на следующей строке? Мне кажется , что я мог бы оставить обратную косую черту в определенных обстоятельствах в [[- ]]состоянии, но не в других, и я пытаюсь выяснить правила.
Менахем
16
\делает свою работу. Ответ @ Guillaume и комментарий @ George четко отвечают на этот вопрос. Здесь я объясняю, почему The backslash has to be the very last character before the end of line character.рассмотрите эту команду:
mysql -uroot \
-hlocalhost
Если после стоит пробел \, продолжение строки работать не будет. Причина в том, что \ удаляет специальное значение для следующего символа, который является пробелом, а не невидимым символом перевода строки. В \этом примере символ перевода строки стоит после пробела .
Ответы:
Символ - обратная косая черта
\
Из руководства bash :
источник
^M
. Проблема, похоже, в том, что сценарий был мне предоставлен кем-то, кто использует окна. Быстроdos2unix
исправил :)Как правило, вы можете использовать обратную косую черту в конце строки, чтобы команда продолжила работу до следующей строки. Однако бывают случаи, когда команды неявно продолжаются, а именно, когда строка заканчивается токеном, который не может законно завершить команду. В этом случае оболочка знает, что будет еще больше, и обратную косую черту можно опустить. Некоторые примеры:
Другое, но родственное - это неявное продолжение внутри кавычек. В этом случае без обратной косой черты вы просто добавляете новую строку в строку.
С помощью обратной косой черты вы снова разделяете логическую строку на несколько логических строк.
источник
[[
-]]
состоянии, но не в других, и я пытаюсь выяснить правила.\
делает свою работу. Ответ @ Guillaume и комментарий @ George четко отвечают на этот вопрос. Здесь я объясняю, почемуThe backslash has to be the very last character before the end of line character.
рассмотрите эту команду:Если после стоит пробел
\
, продолжение строки работать не будет. Причина в том, что\
удаляет специальное значение для следующего символа, который является пробелом, а не невидимым символом перевода строки. В\
этом примере символ перевода строки стоит после пробела .источник