Я ищу правильный синтаксис оператора switch с падающими падежами в Bash (в идеале без учета регистра). В PHP я бы запрограммировал это так:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Я хочу то же самое в Bash:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
Это почему-то не работает: функция do_what_you_are_supposed_to_do()
должна быть запущена, когда $ C равен 2 или 3.
bash
switch-statement
Mischka
источник
источник
function fname { echo "Inside fname"; return 0; }
илиfname() { echo "inside fname"; return 0; }
поместив парены в вызов функции, это может выглядеть как определение функции. Функции должны называться как и любой другой программы командной строки , такие какmv
,cp
,rsync
,ls
,cd
и т.д. ... В этом случае мы называем Fname нравится так:fname $ARGS
.do_nothing()
должно быть заявление SKIP? Использование:
.Ответы:
Используйте вертикальную черту (
|
) для «или».источник
[23])
do_what_you_are_supposed_to_do()
«2» и «3» в один случай не решает эту проблему. Я не уверен, разумно ли редактировать вопрос, чтобы сделать его более понятным, поскольку очевидно, что многие нашли этот ответ полезным.break
в коде PHP.) Редактирование вопроса или его названия, на этой дате исправит многие ответы , которые действительно обеспечивают падение сквозной логики, и , вероятно , не должно быть сделано. Происшествия не было в названии до нескольких правок других пользователей, но уже слишком поздно, чтобы вернуть его обратно.Последние
bash
версии позволяют использовать;&
альтернативу вместо;;
: они также позволяют возобновить проверки регистра с помощью;;&
там.образец вывода
источник
;&
и;;&
. Я изменил"24"
к;;& # resume
и получил те же результаты, так что я до сих пор интересно , когда вы будете использовать;&
проваливаемся.?4
ее,[13]4
чтобы сделать ее более очевидной, а ваши изменения - переломными()
за именами функций в bash, если вы не хотите их определять.[23]
в случае совпадения2
или3
''
вместо""
Если заключено в
""
, интерпретатор (без необходимости) пытается расширить возможные переменные в значении перед сопоставлением.Для сопоставления без учета регистра вы можете использовать классы символов (например
[23]
):Но
abra
не ударил в любое время, потому что это будет соответствовать в первом случае.При необходимости вы можете
;;
в первом случае не указывать продолжить тестирование на совпадения и в следующих случаях. (;;
прыгает наesac
)источник
case "${C,,}" in
если регистр не важен;;
? Разве вы не должны использовать;&
для падения?;;
мне нужно использовать,;;&
если я хочу продолжить тестирование.do_wild_mysterious_things
сделал мой деньПопробуй это:
источник
Если значения целочисленные, вы можете использовать их
[2-3]
или использовать[5,7,8]
для не непрерывных значений.Если значения строковые, вы можете использовать
|
.источник
shift
в конце?shift
удаляет первый аргумент в списке аргументов CLI. В основном на каждой итерации этого цикла всегда$1
используется для получения каждого аргумента из списка аргументов CLI с помощьюshift
.