В сценарии bash, который я получил от другого программиста, длина некоторых строк превышала 80 столбцов. Какой символ или предмет нужно добавить в строку, чтобы указать, что строка продолжается на следующей строке?
В сценарии bash, который я получил от другого программиста, длина некоторых строк превышала 80 столбцов. Какой символ или предмет нужно добавить в строку, чтобы указать, что строка продолжается на следующей строке?
Ответы:
Символ - обратная косая черта \
Из руководства bash :
Символ обратной косой черты '\' может использоваться для удаления какого-либо специального значения для следующего прочитанного символа и для продолжения строки.
^M. Проблема, похоже, в том, что сценарий был мне предоставлен кем-то, кто использует окна. Быстро dos2unixисправил :)
Как правило, вы можете использовать обратную косую черту в конце строки, чтобы команда продолжила работу до следующей строки. Однако бывают случаи, когда команды неявно продолжаются, а именно, когда строка заканчивается токеном, который не может законно завершить команду. В этом случае оболочка знает, что будет еще больше, и обратную косую черту можно опустить. Некоторые примеры:
# 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
С помощью обратной косой черты вы снова разделяете логическую строку на несколько логических строк.
$ x="foo\
> bar"
$ echo "$x"
foobar
[[- ]]состоянии, но не в других, и я пытаюсь выяснить правила.
\делает свою работу. Ответ @ Guillaume и комментарий @ George четко отвечают на этот вопрос. Здесь я объясняю, почему The backslash has to be the very last character before the end of line character.рассмотрите эту команду:
mysql -uroot \ -hlocalhost
Если после стоит пробел \, продолжение строки работать не будет. Причина в том, что \ удаляет специальное значение для следующего символа, который является пробелом, а не невидимым символом перевода строки. В \этом примере символ перевода строки стоит после пробела .