coincidencia de patrones sin eco

coincidencia de patrones sin eco

¿Por qué las salidas son diferentes?

touch a aa bb ccc

echo *

a aa bb ccc // Entendí, * significa que coincide con cero o más

*

aa bb ccc // Estoy confundido.

echo ?

un //OK

?

a aa bb ccc // confundido de nuevo.

*?

aa bb ccc // muy confundido

* *

a aa aa bb bb ccc ccc // muy, muy confundido

Me pregunto cuál es la diferencia entre usar eco y no usarlo.

Respuesta1

Cada línea que escriba debe tener un comando, normalmente la primera palabra.

Para imprimir algo, un comando común es echo.

Si el pwd (directorio de trabajo actual) tiene archivos a, aa, bby ccc.
Luego, este comando imprimirá todos los archivos en el directorio:

 $ echo *
 a aa bb ccc

Y este comando imprimirá todos los archivos en la pwd que tengan un carácter:

$ echo ?
a

Sin embargo, si no proporciona un comando, la primera "palabra" (la mayoría de las veces: hasta el primer espacio en blanco) se considerará el comando.

Si solo proporciona el asterisco *, la primera palabra que resulte de la expansión del asterisco se utilizará como comando a ejecutar.

Si el comando ano existe, se imprimirá un error:

$ *
bash: a: command not found

Si se llama a un comando a, se llamará con los tres argumentos aa bb ccc.

Como no proporciona más detalles, solo podemos adivinar qué comando se está ejecutando con el nombre a(no es un comando predeterminado). Además, no sabemos qué shell estás usando.

Pero todos sus ejemplos muestran que afalta el primero:

$ *
aa bb ccc              ### missing first `a`.
$ *?
aa bb ccc              ### missing first `a`.
$ * *
a aa aa bb bb ccc ccc  ### missing first `a`.

Excepto por:

$ ?
a aa bb ccc

De lo cual es difícil sacar alguna conclusión ya que no sabemos qué es el comando a.

información relacionada