Por favor, explique por que 1 4 5 6 é exibido para as últimas quatro instruções de eco? Eu acertei isso por acidente uma vez, mas agora estou curioso para saber por que esse comportamento ocorre.
Essas declarações funcionam como esperado (para mim).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Essas instruções de eco exibem consistentemente 1 4 5 6. Há algo de especial nesses números?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Obrigado!
- A possível duplicata está relacionada e é útil, mas não uma duplicata. A possível duplicata é da perspectiva de um
rm
comando. Esta questão é da perspectiva de um "comportamento estranho" percebido de umecho
comando. A resposta subjacente para ambos é globbing. Alguém que procurava por problemas com umecho
comando não encontraria facilmente arm
pergunta, mas provavelmente chegaria aqui.
1
4
5
e6
nullglob
, o seu segundo exemplo (echo [237890]
) não imprimirá nada, o que poderia ter sido uma pista de que você estava vendo expansão glob nos outros exemplos.Respostas:
O suporte aberto
[
é um caractere especial para o shell; ele abre um algoritmo de correspondência de padrões que diz "corresponder a qualquer um dos caracteres entre colchetes". Como você tem 4 arquivos nomeados como: 1, 4, 5 e 6 no diretório atual, quando os caracteres dentro dos colchetes contêm qualquer um desses dígitos, seu shell substitui a correspondência de padrão com esses nomes de arquivo. Quando você passar a usarecho [ 9876543210 ]
você está chamando echo com 3 parâmetros:[
,9876543210
, e]
.Você deve citar os parâmetros da instrução echo para impedir que o shell a veja como uma solicitação de correspondência de padrão.
(ou remova os arquivos nomeados 1, 4, 5 e 6 - mas essa é uma solução alternativa para demonstrar o comportamento, não uma correção).
fonte
echo [ 987 ]
chamaecho
com três parâmetros do que sequer mencionartest
?echo
é interpretado de maneira diferente,bash
dependendo da existência ou não de espaços entre colchetes e o que há dentro deles.[123]
vs.[ 123 ]
.