Comando de teste interno do colons e do traço

3

Qual é o significado de um sinal de vírgola final para o comando test (ou [ ) embutido do traço? Fiquei surpreso quando descobri que if [ ... ]: ; then .. ; fi funciona (em tudo) em dash , mas não bash , e parece ser porque o comportamento interno difere do comando.

$ /usr/bin/\[ 1 ] && echo 1
1
$ /usr/bin/\[ 1 ]: && echo 1
/usr/bin/[: missing ']'
$ [ 1 ]: && echo 1
1
    
por David Ehrmann 26.03.2015 / 19:53

1 resposta

2

Parece ser mais um problema se analisar os comandos. bash espera que o colchete de fechamento seja o último argumento e reclama se não for exatamente uma string "]".

bash$ [ 1 ]
bash$ [ 1 ] hi
bash: [: missing ']'
bash$ [ 1 ]hi
bash: [: missing ']'
bash$ dash
$ [ 1 ]
$ [ 1 ] hi
dash: 2: [: missing ]
$ [ 1 hi]
dash: 3: [: missing ]
$ [ 1 ]:
$ [ 1 ]hi
$

A concha dash apenas fará com que o primeiro caractere seja "]" e ignore o resto. Se o "]" não estiver no primeiro caractere do último argumento, ele retornará um erro semelhante como bash .

    
por 26.03.2015 / 20:15

Tags