¿El comportamiento de .*
incluir .
y ..
definir en LSB o POSIX o alguna otra especificación?
Citando de la especificación Single Unix versión 2, volumen "Comandos y utilidades", §2.13.3 :
Si un nombre de archivo comienza con un punto (
.
), el período debe coincidir explícitamente utilizando un punto como primer carácter del patrón o inmediatamente después de un carácter de barra diagonal. (...) No se especifica si un período explícito en una lista de coincidencia de expresiones de paréntesis, como[.abc]
puede coincidir con un período inicial en un nombre de archivo.
No hay ninguna excepción que haga que el segundo período en ..
, o la cadena vacía que sigue al único período en .
, no coincida con el comodín en .*
. Por lo tanto, el estándar dice que .*
coincide .
y..
, por muy molesto que sea.
El pasaje anterior describe el comportamiento del shell ( sh
comando). La sección sobre la glob
función de biblioteca C hace referencia a este pasaje.
El lenguaje es exactamente el mismo en la versión 3 , también conocida como POSIX: 2001 e IEEE 1003.1-2001, que es lo que implementan la mayoría de los sistemas actuales.
Dash, bash y ksh93 cumplen con POSIX. Pdksh y zsh (incluso debajo emulate sh
) no.
En ksh, puede .*
omitir .
y ..
configurar FIGNORE='.?(.)'
, pero esto tiene el efecto secundario de *
incluir archivos de puntos. O puede configurar FIGNORE='.*'
, pero luego .*
no coincide con nada.
En bash, puede .*
omitir .
y ..
configurar GLOBIGNORE='.:..'
, pero esto tiene el efecto secundario de *
incluir archivos de puntos. O puede configurar GLOBIGNORE='.*'
, pero luego .*
no coincide con nada.
bash
no siempre cumple con POSIX. solo cuando se invoca comosh
.Probablemente te refieres a la funcionalidad en bash expansion sobre globignore. Por defecto, la coincidencia de expansión bash. y ... pero leyendo al hombre:
Puede configurar la variable
GLOBIGNORE=.:..
para que cuando escriba algo como esto:solo está eliminando el directorio actual. El estándar POSIX solo especifica eso. es el directorio actual y ... en el padre del directorio actual. El significado especial de. * Es interpretado por bash u otros shells (o programas como grep).
fuente
La página de manual de Linux hace referencia a POSIX.2, 3.13.
fuente
man
,man glob
o las páginas de manual para estar presentes? No pude encontrar hombre aquí (para mi sorpresa).Por lo que puedo decir, el LSB 4.1 no requiere
bash
y solosh
.Para
sh
ello sigue POSIX (con una extensión menor no relevante).fuente