¿Qué significa el signo de interrogación en el comando de terminal?


Respuestas:


15

Esos se llaman comodines (patrones globales)

Varias utilidades de línea de comandos utilizan los comodines estándar (también conocidos como patrones globales) para trabajar con varios archivos.
Casi todos los comandos usan comodines estándar (incluidos mv, cp, rm y muchos otros).

  • (question mark)

    Esto puede representar cualquier carácter individual. Si especificó algo en la línea de comando como "hd?" GNU / Linux buscaría hda, hdb, hdc y cualquier otra letra / número entre az, 0-9.

  • *(asterisk)

    Esto puede representar cualquier número de caracteres (incluyendo cero, en otras palabras, cero o más caracteres). Si especificó un "cd *", usaría "cda", "cdrom", "cdrecord" y cualquier cosa que comience con "cd", que también incluya "cd". "m * l" podría ser por molino, mull, ml y cualquier cosa que comience con una m y termine con una l.

  • [ ] (square brackets)

    Especifica un rango. Si hiciste m [a, o, u] m puede convertirse en: mamá, mamá, mamá si lo hiciste: m [ad] m puede convertirse en cualquier cosa que comience y termine con m y tenga cualquier carácter a a d en el medio. Por ejemplo, estos funcionarían: mam, mbm, mcm, mdm. Este tipo de comodín especifica una relación "o" (solo necesita una para que coincida).

  • { } (curly brackets)

    los términos están separados por comas y cada término debe ser el nombre de algo o un comodín. Este comodín copiará todo lo que coincida con los comodines o los nombres exactos (una relación "o", una u otra).


Por ejemplo, esto sería válido:

  • cp { .doc, .pdf} ~

    Esto copiará todo lo que termine con .doc o .pdf al directorio de inicio de los usuarios. Tenga en cuenta que no se permiten espacios después de las comas (o en cualquier otro lugar).

  • [!]

    Esta construcción es similar a la construcción [], excepto que en lugar de hacer coincidir cualquier carácter dentro de los corchetes, coincidirá con cualquier carácter, siempre que no esté en la lista entre [y]. Este es un NO lógico. Por ejemplo, rm myfile [! 9] eliminará todos mis archivos * (es decir, myfiles1, myfiles2, etc.) pero no eliminará un archivo con el número 9 en ningún lugar dentro de su nombre.

  • \ (backslash)

    se utiliza como carácter de "escape", es decir, para proteger un carácter especial posterior Por lo tanto, "\” busca una barra diagonal inversa. Tenga en cuenta que es posible que necesite usar comillas y barra diagonal inversa (s).

para más ejemplos: visite esta página


3
Vale la pena mencionar que apt-get removerequiere nombres de paquetes , no nombres de archivos, lo que hace que la expansión de comodines por parte del shell sea en gran medida inútil. Si desea eliminar un rango de paquetes, necesita usar una expresión regular completa, citada apropiadamente para evitar que el shell intente interpretarla como un globo (por ejemplo apt-get remove 'gnome.*').

44
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> FALSO. el shell expande estos comodines y lo que recibe el comando es el resultado de la expansión (es decir, los archivos que coinciden con el patrón) en lugar del patrón. (si no hay ningún archivo que coincida con el patrón, entonces ese patrón se pasará directamente al comando, sin embargo)
Carlos Campderrós

17

En términos generales, en Bash, a ?es un patrón global que se expande a un carácter arbitrario.

Por ejemplo:

$ echo Hello1 > foo1
$ echo Hello2 > foo2
$ cat foo?
Hello1
Hello2

Es similar a a *, pero a se *expande a 0 o más caracteres, mientras que a se ?expande a exactamente un carácter (arbitrario).

Sin embargo, ?en su caso especial, el comando aparentemente era un error tipográfico.


Entonces es inútil / innecesario en mi caso, ¿verdad?
Ooker

Si. De hecho, fue editado de la respuesta a la que se vinculó cuando hizo su pregunta. :)
Malte Skoruppa

1
No puedo creerlo: -o
Ooker

1
Incluso si fueran comodines correctos, este uso debe evitarse sin citar. apt-get entiende los RE, pero si gnome1existe un archivo llamado en el directorio actual, el shell lo expandirá antes de que apt-get tenga alguna posibilidad de verlo.
Rmano

@Ooker ¡Nunca lo olvidarás ahora!
Comrademike
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.