correspondência de padrões sem eco

correspondência de padrões sem eco

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, bbe 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 anã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 afalta 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.

informação relacionada