Sintaxe aritmética no bash

1

Estou recebendo o erro abaixo em valores aritméticos

#!/bin/bash
n=0
line_count=9
line_count=$(line_count)/3
echo $line_count
exit 0

o resultado esperado é 3

[]$ ./test.sh
./test.sh: line 4: line_count: command not found
/3
[]$ more test.sh
    
por Baba 16.02.2017 / 13:32

2 respostas

9

Para complementar a resposta do @ Kusalananda , além da sintaxe sh padrão:

line_count=$((line_count / 3))

Em bash , você também pode usar essas sintaxes herdadas de ksh (também funcionam em zsh ):

  • ((line_count = line_count / 3))
  • ((line_count /= 3))
  • let line_count/=3
  • typeset -i line_count; line_count=line_count/3

bash (e zsh ) também suportam:

  • line_count=$[line_count/3]

Para o antigo pré-POSIX Bourne / Almquist sh :

line_count='expr "$line_count" / 3'
    
por 16.02.2017 / 13:51
6

A expansão aritmética é feita por bash e algumas outras camadas com $(( ... )) , por exemplo

line_count=$(( line_count/3 ))

Com line_count=$(line_count)/3 , você está atribuindo a saída do comando line_count à variável line_count , com o sufixo /3 .

É por isso que você recebe o erro "line_count: command not found" e, em seguida, a saída /3 .

Dê uma olhada no ShellCheck no link É capaz de verificar o script para problemas comuns. Nesse caso, isso não ajudará você a identificar que $(...) deveria ter sido $((...)) , mas isso porque $(line_count) é um código shell perfeitamente legal. Apenas faz a coisa errada.

    
por 16.02.2017 / 13:37