linux bash se a instrução interna for loop [duplicate]

2

Estou tentando fazer a iteração de 1 a 30, digamos, oi #number de cada um, exceto do número 10. É isso que tenho, o que não está funcionando

for i in {1..30}; do if [i != 10]; then echo "hello $i"; fi; done

minha saída disso é bash [i: comando não encontrado - trinta vezes

    
por Oscalation 16.01.2016 / 00:40

2 respostas

3

Sua declaração if está errada, deve ser if [ $i != 10 ] . Espaços ao redor do [ são obrigatórios e suas variáveis devem ter um sinal $ antes, se você estiver lendo-as.

for i in {1..30}; do if [ $i != 10 ]; then echo "hello $i"; fi; done
    
por 16.01.2016 / 00:43
0

if testa comandos. if [ ... ] funciona porque [ é um comando ( /usr/bin/[ ou um construído (geralmente o último)) que espera ] como seu último argumento (apenas para fazer as coisas parecerem bonitas). Mas além disso, são necessários parâmetros, que precisam ser passados normalmente - como uma lista separada por espaços.

Se você não quiser usar [ , você pode fazer: if test $i != 10; then e se comportará exatamente da mesma maneira.

Alternativamente, há [[ em bash , que é uma construção gramatical apropriada que cria um contexto separado, que permite usar coisas como > ou && nele com semântica diferente do que eles significariam em uma chamada de comando usual ( [ e test são apenas invocações de comando), mas você ainda precisa de espaços em torno de [[ e ]] .

    
por 16.01.2016 / 00:50