Подтвердить что ты не робот

Точки с запятой, лишние в конце строки в сценариях оболочки?

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

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;

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

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

4b9b3361

Ответ 1

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

Ответ 2

Согласно 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>

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

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

Ответ 3

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

Ответ 4

@Opensourcebook-Amit

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

Смотрите приведенные ниже примеры:

На терминале:

[[email protected] test]# ls;pwd;

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

[[email protected] test]# cat test4.sh

echo "Current UserName:"
whoami

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

[[email protected] test]#

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

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

Ответ 5

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

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

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

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

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