Estoy buscando la sintaxis correcta de la instrucción switch con casos fallidos en Bash (idealmente no distingue entre mayúsculas y minúsculas). En PHP lo programaría como:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Quiero lo mismo en Bash:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
Esto de alguna manera no funciona: la función do_what_you_are_supposed_to_do()
debe activarse cuando $ C es 2 O 3.
bash
switch-statement
Mischka
fuente
fuente
function fname { echo "Inside fname"; return 0; }
ofname() { echo "inside fname"; return 0; }
colocando parens en una llamada de función, puede parecer que es una definición de función. Funciones deben ser llamadas como cualquier otro programa de línea de comandos comomv
,cp
,rsync
,ls
,cd
, etc ... En este caso llamamos fnombre este modo:fname $ARGS
.do_nothing()
será una declaración SKIP? Uso:
.Respuestas:
Use una barra vertical (
|
) para "o".fuente
[23])
do_what_you_are_supposed_to_do()
, al colapsar "2" y "3" en un solo caso no resuelve esto. No estoy seguro si editar la pregunta para aclarar esto es razonable, ya que es obvio que muchas personas han encontrado útil esta respuesta.break
en el código php.) Edición de la cuestión, o su título, en esta fecha invalida muchas de las respuestas, que no proporcionan la caída a través de la lógica, y probablemente no se debe hacer. Fall-through no estaba en el título hasta varias ediciones de otros usuarios, pero es demasiado tarde para volver a sacarlo ahora.Las
bash
versiones recientes permiten el uso;&
fallido en lugar de;;
: también permiten reanudar las verificaciones de casos al usar;;&
allí.salida de muestra
fuente
;&
y;;&
. Cambié"24"
a;;& # resume
y obtuve los mismos resultados, por lo que todavía me pregunto cuándo;&
usarías la falla.?4
a[13]4
para hacerlo más obvio y para hacer que tu cambio sea un cambio radical()
nombres de funciones detrás de bash a menos que desee definirlos.[23]
en caso de que coincida2
o3
''
lugar de""
Si se incluye
""
, el intérprete (innecesariamente) intenta expandir las posibles variables en el valor antes de hacer coincidir.Para la coincidencia entre mayúsculas y minúsculas, puede usar clases de caracteres (como
[23]
):Pero
abra
no golpeó en ningún momento porque será igualado por el primer caso.Si es necesario, puede omitir
;;
en el primer caso para continuar probando coincidencias en los siguientes casos también. (;;
salta aesac
)fuente
case "${C,,}" in
si el caso no es importante;;
? ¿No se supone que debes usar;&
para fallthrough?;;
, necesito usarlo;;&
si deseo continuar probando.do_wild_mysterious_things
mePrueba esto:
fuente
Si los valores son enteros, puede usarlos
[2-3]
o puede usarlos[5,7,8]
para valores no continuos.Si los valores son cadenas, puede usarlos
|
.fuente
shift
final?shift
elimina el primer argumento en la lista de argumentos de CLI. Básicamente, en cada iteración de este ciclo siempre$1
se usa para obtener cada argumento de la lista de argumentos de CLI con la ayuda deshift
.