Por que as saídas são diferentes?
touch a aa bb ccc
echo *
a aa bb ccc // entendi, * significa que corresponde a zero ou mais
*
aa bb ccc // Estou confuso.
echo ?
um ok
?
a aa bb ccc // confuso novamente.
*?
aa bb ccc // muito confuso
* *
a aa aa bb bb ccc ccc // muito, muito confuso
Eu me pergunto qual é a diferença entre usar echo e não usá-lo.
Responder1
Cada linha que você escreve deve ter um comando, geralmente a primeira palavra.
Para imprimir algo, um comando comum é echo
.
Se o pwd (diretório de trabalho atual) tiver arquivos a
, aa
, bb
e ccc
.
Então, este comando imprimirá todos os arquivos do diretório:
$ echo *
a aa bb ccc
E este comando irá imprimir todos os arquivos no pwd que possuem um caractere:
$ echo ?
a
Porém, se você não fornecer um comando, a primeira "palavra" (na maioria das vezes: até o primeiro espaço em branco) será considerada o comando.
Se você fornecer apenas o asterisco *
, a primeira palavra resultante da expansão do asterisco será usada como comando a ser executado.
Se o comando a
não existir, um erro será impresso:
$ *
bash: a: command not found
Se houver um comando chamado a
, ele será chamado com os três argumentos aa bb ccc
.
Como você não fornece mais detalhes, só podemos adivinhar qual comando está sendo executado com o nome a
(não é um comando padrão). Também não sabemos qual shell você está usando.
Mas todos os seus exemplos mostram que a
falta o primeiro:
$ *
aa bb ccc ### missing first `a`.
$ *?
aa bb ccc ### missing first `a`.
$ * *
a aa aa bb bb ccc ccc ### missing first `a`.
Exceto por:
$ ?
a aa bb ccc
Do qual é difícil tirar qualquer conclusão, pois não sabemos o que é comando a
.