Каково использование ; в однострочной команде?

Каково использование ; в однострочной команде?

Что ;означает в однострочных скриптах, подобных этому:

while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &

Означает ли это новую строку или «следующую команду»?

решение1

Это разделитель команд. Хотя в первом случае, возможно, лучше было бы думать о нем как о конце оператора while.

Например, если вы хотите выполнить цикл, пока какая-то команда возвращает успешное выполнение, вы должны сделать что-то вроде

while test -f /foo; do some_command; done`

Точка с запятой используется для обозначения конца аргументов для test. В противном случае он бы подумал, что doэто еще один аргумент для test.

Однако вы можете использовать новые строки вместо точки с запятой. Следующий пример будет полностью эквивалентен примеру выше, только без точек с запятой

while test -f /foo
do
some_command
done

На самом деле, если в bash вы выполните указанную выше команду, а затем после ее завершения (или нажмете CTRL+C) вернетесь в историю (используя клавиши со стрелками вверх или что-то еще), вы заметите, что многострочная команда заменяется на команду, в которой вместо нее используются точки с запятой.


Так что да, синтаксис для таких вещей, ifкак и whileломает нормальное поведение оболочки.
Лично я всегда считал синтаксис странным, так как doвыглядит странно. Но к нему привыкаешь.

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