Estoy tratando de escribir una función bash que use nocasematch
sin cambiar la configuración de las personas que llaman de la opción. La definición de la función es:Make shopt change local to function
is_hello_world() {
shopt -s nocasematch
[[ "$1" =~ "hello world" ]]
}
Antes de que yo lo llamo:
$ shopt nocasematch
nocasematch off
Llámelo:
$ is_hello_world 'hello world' && echo Yes
Yes
$ is_hello_world 'Hello World' && echo Yes
Yes
Como era de esperar, pero ahora nocasematch
de la persona que llama ha cambiado:
$ shopt nocasematch
nocasematch on
¿Hay alguna manera fácil de hacer que la opción cambie localmente a la función?
Sé que puedo verificar el valor de retorno de shopt -q
pero eso significa que la función debe recordar esto y reiniciarlo antes de salir.
Eso funciona muy bien, gracias. – Thor
+1 ¡Aseado! No lo sabía. – tripleee
'foo() {...}' se ve tan natural, nunca se piensa que las llaves no son parte de la sintaxis de la función, en lugar del comando compuesto comúnmente utilizado. – chepner