correspondência de padrões sem eco

1

Por que as saídas são diferentes?

touch a aa bb ccc

echo *

a aa bb ccc // Eu entendi, * significa corresponde a zero ou mais

*

aa bb ccc // Estou confuso.

echo ?

a // OK

?

um aa bb ccc // confuso novamente.

*?

aa bb ccc // muito confuso

* *

um aa aa bb bb ccc ccc // muito muito confuso

Eu me pergunto qual é a diferença entre usar o eco e não usá-lo.

    
por bluebird 21.05.2016 / 22:22

1 resposta

3

Cada linha que você escreve deve ter um comando, geralmente a primeira palavra.

Para obter algo impresso, um comando comum é echo .

Se o pwd (diretório de trabalho atual) tiver arquivos a , aa , bb e ccc .
Então, este comando irá imprimir todos os arquivos no diretório:

 $ echo *
 a aa bb ccc

E este comando irá imprimir todos os arquivos no pwd que possuem um caractere:

$ echo ?
a

No entanto, se você não fornecer um comando, a primeira "palavra" (na maioria das vezes: até o primeiro espaço em branco) será considerada como o comando.

Se você fornecer apenas o asterisco * , a primeira palavra resultante da expansão do asterisco será usada como o 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 fazer uma estimativa de 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 o primeiro a está ausente:

$ *
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

De qual é difícil fazer qualquer conclusão, pois não sabemos qual comando é a .

    
por 21.05.2016 / 23:02