Точки с запятой лишние в конце строки в скриптах оболочки? - PullRequest
85 голосов
/ 22 сентября 2011

У меня есть сценарий оболочки, который содержит следующее:

case $1 in
    0 )
    echo $1 = 0;
    OUTPUT=3;;
    1 )
    echo $1 = 1;
    OUTPUT=4;;
    2 )
    echo $1 = 2;
    OUTPUT=4;;
esac

HID=$2;
BUNCH=16;
LR=.008;

Являются ли точки с запятой полностью лишними в приведенном выше фрагменте?И есть ли какая-то причина, по которой некоторые люди используют двойные точки с запятой?

Кажется, точки с запятой - это только разделитель, который вы бы использовали вместо новой строки.

Ответы [ 5 ]

129 голосов
/ 22 сентября 2011

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

27 голосов
/ 22 сентября 2011

Согласно man bash:

  metacharacter
         A character that, when unquoted, separates words.  One of the following:
         |  & ; ( ) < > space tab
  control operator
         A token that performs a control function.  It is one of the following symbols:
         || & && ; ;; ( ) | |& <newline>

Таким образом, ; может быть метасимволом или оператором управления, в то время как ;; всегда является оператором управления (в случае команды).

В вашем конкретном коде все ; в конце строки не нужны. Однако ;; необходим.

4 голосов
/ 05 августа 2015

В особом случае находки,; используется для завершения команд, вызванных -exec. Смотрите ответ @kenorb на этот вопрос .

0 голосов
/ 16 февраля 2018

@ Opensourcebook-Amit

новых строк, эквивалентных одной точке с запятой (;) на терминале или в скрипте оболочки.

См. Приведенные ниже примеры:

На терминале: [root @ server test] # ls; pwd;


На сценарии оболочки:

[root @ server test] # cat test4.sh

echo "Текущее имя пользователя:" whoami

echo -e "\ nCurrent Date:"; date;

[root @ server test] #

Но я не согласенс комментарием, который & эквивалентен новой строке или одной точке с запятой

& - запускает команды в фоновом режиме, также является разделителем команд, но не работает как точка с запятой или новая строка.

0 голосов
/ 19 августа 2016

@ Игнасио Васкес-Абрамс

На самом деле это не совсем точно, одиночные точки с запятой в конце строки не лишние и определенно не то же самое, что новые строки.

Из Справочного руководства Bash

Команды, разделенные символом «;», выполняются последовательно; оболочка ждет для каждой команды, чтобы завершиться по очереди. Статус возврата - выход статус последней выполненной команды.

Команды, разделенные «новой строкой» могут выполняться параллельно, когда команды, разделенные точкой с запятой всегда выполняются последовательно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...