La forma estándar de hacer aritmética en el shell es $((..))
. El estándar test
/ [
solo admite comparaciones y otras pruebas. Entonces, la versión conforme al estándar -sería:
if [ "$(( p % 2 ))" -ne 0 ]; then...
(Eso solo necesita las comillas si su IFS
contiene dígitos, por lo que generalmente no son necesarios.)
En Bash/ksh/zsh, puede usar la construcción ((.. ))
, que funciona como un comando y también permite la prueba:
if (( p % 2 != 0 )); then...
La prueba [[
parece permitir algo de aritmética, pero es un poco exigente con la sintaxis/los espacios en blanco, por lo que probablemente no debería hacerlo.
En cuanto a por qué la asignación a p
no persiste fuera del bucle, consulte