Bash: para i en *.xls, devuelve un resultado incluso si no hay archivos xls
Tengo un directorio vacío. El comando:
for i in *.xls; do echo $i; done
devuelve
*.xls
¿Podrías explicar por qué? Y ¿cómo corregir esto por favor?
Gracias.
Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.
davy.ai
El comando
for i in *.xls; do echo $i; done
está utilizando un patrón de búsqueda denominado “glob pattern”*.xls
para encontrar cualquier archivo con la extensión.xls
en el directorio actual. Sin embargo, dado que no hay archivos con esa extensión en el directorio, el patrón no se expande y se mantiene tal como está. El comandoecho
entonces imprime el patrón*.xls
tal como está.Para corregir esto, puedes utilizar la opción
nullglob
que permite que el patrón se expanda a nada cuando no hay coincidencias. Puedes modificar el comando de la siguiente manera:El comando
shopt -s nullglob
habilita la opciónnullglob
antes del buclefor
, lo cual le indica a bash que expanda los patrones a nada si no hay coincidencias. Con esta opción habilitada, el buclefor
no se ejecutará en absoluto dado que no hay archivos que coincidan.