bash shell - como fazer um loop aninhado sem “erro de sintaxe: operando esperado” [duplicado]

0

Estou tentando

for i in {4..100}
do
  is_prime=true
  a=$(($i-1))
  for divider in {2..$a}
  do  
    b=$(($i % $divider)) # <-- line 9
    [ $b -eq 0 ] && echo 'y' #is_prime=false
  done
  [ is_prime == true ] && print "${i} is prime!"
done

mas eu recebo

$ ./3_largest_prime.sh 
./3_largest_prime.sh: line 9: 4 % {2..3}: syntax error: operand expected
(error token is "{2..3}")
    
por Michael Durrant 01.01.2015 / 05:32

1 resposta

2

Se você colocar

set -xv  

no seu script, você pode detectar por que há um erro.

No seu script, será exibida a seguinte linha:

+for divider in '{2..$a}'

Observe que a expansão não ocorreu. Leia os duplicados vinculados para identificar como corrigi-lo.

    
por 01.01.2015 / 07:45