bash switch-statement pattern-matching case

¿Cómo hacer que una caja de conmutadores Bash coincida con varias condiciones de rango numérico?



switch-statement pattern-matching (2)

El case Bash no funciona con rangos de números. [] es para patrones de concha.

por ejemplo, este caso [1-3]5|6) funcionará para 15 o 25 o 35 o 6.

Tu código debería verse así:

i=10 a=1 b=0.65 if [ "$a" != "$b" ] ; then case $i in 1|2|5) echo "Not OK"; ;; 9|10|12) echo "may be ok"; ;; *) echo "no clue - $i"; ;; esac; fi

Si puedo ser real entre 9 y 10, deberás usar if (en lugar de mayúsculas y minúsculas) con rangos.

Estoy ejecutando la caja del conmutador con el número de la columna, mis números de columna pueden ser de 0 a 50. Cuando se ejecuta en bucle, se validan. Ahora cada caso admite un número de columna discreto y observo que es un error. Ejemplo: mi número de columna es 10, y aquí está el código -

i=10 a=1 b=0.65 if [ "$a" != "$b" ] ; then case $i in [1]|[2]|[5]) echo "Not OK"; ;; [9-10]|[12]) echo "may be ok"; ;; *) echo "no clue - $i"; ;; esac; fi

Supongo que "puede estar bien", pero no tengo ni idea - 10


if y [ solución

arg=1 if [ "$arg" -lt 5 ]; then echo ''less than 5'' elif [ "$arg" -lt 15 ]; then echo ''less than 15'' elif [ "$arg" -eq 17 ] || [ "$arg" -eq 19 ]; then echo ''17 or 19'' else echo ''neither'' fi

POSIX 7

Bash sigue a POSIX como se menciona en https://.com/a/25482040/895245

Aquí está la cita: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01 sección "Case Conditional Construct":

El caso de constructo condicional ejecutará la lista compuesta correspondiente al primero de varios patrones (ver Notación de coincidencia de patrón) [...] Varios patrones con la misma lista compuesta deberán estar delimitados por ''|'' símbolo. [...]

El formato para la construcción del caso es el siguiente:

case word in [(] pattern1 ) compound-list ;; [[(] pattern[ | pattern] ... ) compound-list ;;] ... [[(] pattern[ | pattern] ... ) compound-list] esac

y luego http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13 sección "2.13. Notación de coincidencia de patrones" dice:

[Si un corchete abierto introduce una expresión de corchete como en XBD RE Expresión de corchetes

y expresiones regulares extendidas apunta a la sección "9.3.5 Expresión de paréntesis RE" que dice:

Una expresión de paréntesis (una expresión entre corchetes, "[]") es un RE que debe coincidir con un conjunto específico de caracteres individuales, y puede coincidir con un conjunto específico de elementos de clasificación de múltiples caracteres, basado en el conjunto no vacío de enumerar expresiones contenidas en la expresión de corchetes.

Por lo tanto, solo se consideran los caracteres individuales cuando se hace algo como:

[9-10]