Dentro de (( ... ))
avaliação aritmética, =
é um operador de atribuição não é um operador comparação lógica . Portanto, $(($w = 0))
é a variável de desreferência w
e, em seguida, tentar atribuir o valor 0
ao seu valor .
Provavelmente, o que você pretendia era if $(($w == 0))
. No entanto, embora sintaticamente correta, a sintaxe de expansão de parâmetro $w
não é necessária neste contexto, portanto, você pode simplificar isso para if ((w == 0))
e, da mesma forma, para $(( $w != 0 ))
e assim por diante. Na seção ARITHMETIC EVALUATION
de man bash
:
Shell variables are allowed as operands; parameter expansion is per‐ formed before the expression is evaluated. Within an expression, shell variables may also be referenced by name without using the parameter expansion syntax.
Observe também que -le
, -gt
operadores são para comparação aritmética dentro de [ ... ]
ou [[ ... ]]
colchetes de teste; dentro de (( ... ))
colchetes (que são para avaliação aritmética somente ), você deve usar <=
, >
e assim por diante.