¿El globbing es una característica del caparazón?

12

Leo muchas preguntas y respuestas como esta y esta

Sé que el shell expande los comodines antes de ejecutar un comando y son una característica del shell. También los comodines funcionan con esos comandos que pueden aceptar muchos argumentos. En find . -name *.rb si tenemos más de un archivo en el directorio actual findnos dará un error porque hallazgo no puede aceptar varios argumentos y las maneras de resolver este son:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

Escapamos del asterisco y evitamos la expansión del shell, pero los comodines son una característica del shell; cuando escapamos del asterisco, no conoce su significado, y debería encontrar un archivo llamado *.rb, entonces, ¿cómo se expande el asterisco en este caso?

Sinoosh
fuente

Respuestas:

21

Sí, el shell entiende *como todos los archivos con cualquier carácter en el directorio y *.rbcomo todos los archivos con cualquier carácter y final .rb, y lo expande como tal.

El findcomando en sí acepta el globbing.

Si no cita el *shell, entonces el shell lo expandirá antes de que el findcomando vea su argumento, por lo que en lugar de *.rbpasar un glob a find, se pasarán los nombres de todos los archivos que coincidan con el glob en el directorio find, e findintentará interpretarlos. como argumentos, lo que probablemente dará como resultado un error, o al menos no lo que desea (funcionará correctamente solo si no hay archivos coincidentes en el directorio actual)

Zanna
fuente
gracias, ¿significa que decimos que no es un problema pero que algunos comandos pueden expandir los comodines? ¿O podemos decir que si tenemos un caparazón sin entender sobre el bloqueo de esos comandos sabe que el bloqueo puede expandirlos?
Sinoosh
55
si *se cita, entonces el shell no lo expandirá, y el argumento que incluye el glob se pasa al comando que puede entender el glob - es lo mismo para cualquier comando que acepte expresiones regulares que siempre se debe citar ...
Zanna
1
Un placer ^ _ ^
Zanna
77
@Sinoosh: Tenga en cuenta que no todos los comandos entienden la sintaxis global. Simplemente es una característica defind
slebetman
1
@Sinoosh Find no está realmente "expandiendo" el comodín, lo está usando como una prueba para que coincida con cada nombre de archivo que encuentre. Hay (muy) pocos comandos que expanden comodines en el sentido convencional: descomprimir y 7z pueden usarlo para abrir múltiples archivos (cuando sus argumentos son normalmente de una forma " [archive filename single argument] [list of files to extract]"), por ejemplo.
Random832