¿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
, bb
y 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 a
no 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 a
falta 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
.