Desplazarse hacia abajo ...
Los nombres de archivo .
y ..
siempre se ignoran cuando GLOBIGNORE
se establece y no es nulo.
La mayoría de las veces, no es deseable incluir .
y ..
como comodines, ya que no representan archivos dentro del directorio, son hacks para que la navegación del directorio funcione. De hecho, el origen de los archivos de puntos es un error en una versión anterior del ls
comando . El autor pretendía excluir .
y ..
de la lista, pero excluyó accidentalmente todos los archivos que comienzan con .
. Por lo tanto, los archivos de puntos quedaron ocultos ls
. Los proyectiles siguieron su ejemplo al ocultar archivos de puntos como ls
. Sin embargo, la forma en que esto se hizo fue nuevamente un truco: los archivos que comienzan .
solo se excluyen si el punto no coincide explícitamente en el patrón. Entonces el patrón .*
incluye .
y ..
.
Para preservar la compatibilidad con los scripts existentes, los shells modernos aún incluyen .
y ..
(excepto zsh, que en este tema, como muchos otros, tiene un comportamiento más sano pero no compatible con versiones anteriores). Sin embargo, si configura GLOBIGNORE
, está utilizando una función específica de bash, que muestra que no está interesado en la compatibilidad con versiones anteriores. Entonces, la coincidencia de patrones cambia para excluir .
y ..
de todas las coincidencias de patrones.
La configuración GLOBIGNORE=.
excluye un archivo que se excluye automáticamente de todos modos cada vez que GLOBIGNORE
se configura, por lo que es equivalente a shopt -s dotglob
excepto eso .
y ..
además se excluye de todos los patrones.
GLOBIGNORE
solo ignora.
y..
en patrones sin barra y GLOBIGNORE filtra las rutas de los archivos, no los nombres de los archivos.GLOBIGNORE=.; echo .*
no incluirá.
ni..
, peroGLOBIGNORE=.; echo ./.*
(oecho /bin/.*
) lo hará! Para ignorar.
y..
de todos los globos, parece que necesitashopt -s extglob
yGLOBIGNORE='?(*/)@(.|..)'
.GLOBIGNORE='?(*/)@(.|..)'
sería un fracaso para excluir.
y..
en.*/foo
.GLOBIGNORE='?(*/)@(.|..)?(/*)'
rompería globos como./*
...De la sección titulada "Expansión del nombre de ruta" en
man bash
:fuente