A maneira padrão de fazer aritmética no shell é $((..))
. O padrão test
/ [
suporta apenas comparações e outros testes. Então, a versão em conformidade com o padrão seria:
if [ "$(( p % 2 ))" -ne 0 ]; then...
(Isso só precisa das aspas se o seu IFS
contiver dígitos, então normalmente eles não são necessários.)
No Bash / ksh / zsh, você pode usar a construção (( .. ))
, que funciona como um comando e permite o teste também:
if (( p % 2 != 0 )); then ...
O teste [[
parece permitir alguma aritmética, mas é um pouco exigente quanto à sintaxe / espaço em branco, então você provavelmente não deveria fazer isso.
Quanto à razão pela qual a atribuição a p
não persiste fora do loop, consulte