cf el ejemplo de case aquí
Específicamente:
$: g=a*[b]; case $g in $g) echo 'unquoted pattern' ;; "$g") echo 'quoted pattern' ;; esac quoted patternUna cadena simple se comporta exactamente como se esperaba:
$: g=a; case $g in $g) echo 'unquoted pattern' ;; "$g") echo 'quoted pattern' ;; esac unquoted pattern Me aseguré de que no hubiera ningún archivo coincidente con shopt , ni opciones de compra que enturbiaran el agua, y probé el valor explícitamente:
$: echo @$g@ "@$g@" $g "$g" @a*[b]@ @a*[b]@ a*[b] a*[b] $: [[ $g == "$g" ]] && echo ok || echo no ok Entonces, ¿por qué , en este caso, elige la segunda opción?
¿No deberían ambos evaluar los mismos resultados?
La declaración de case utiliza la coincidencia de patrones, no la igualdad de cadenas, para comparar la palabra con cada patrón.
El patrón a*[b] coincide con cualquier cadena que comience con a , con cero o más caracteres seguidos de una sola b . No coincide con la cadena a*[b] , porque esa cadena termina con a ] , no con a b .