Точки с запятой, лишние в конце строки в сценариях оболочки?
У меня есть сценарий оболочки, который содержит следующее:
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;
Точки с запятой полностью лишние в приведенном выше фрагменте? И есть ли причина, по которой некоторые люди используют двойные точки с запятой?
Похоже, точки с запятой - это только разделитель, который вы бы использовали вместо новой строки.
Ответы
Ответ 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
Команды, разделенные символом '; выполняются последовательно; оболочка ждет для каждой команды для завершения по очереди. Возвращаемым статусом является выход статус последней выполненной команды.
Команды, разделенные "новой строкой" могут быть выполняются параллельно, когда команды, разделенные точкой с запятой, всегда выполняются последовательно