Calcular variável e enviá-lo para outra variável

10

A única calculadora que eu sei é bc. Eu quero adicionar 1a uma variável e saída para outra variável.

Eu recebi a nextnumvariável da contagem de string em um arquivo:

nextnum=`grep -o stringtocount file.tpl.php | wc -w`

Vamos dizer que o nextnumvalor é 1. Quando adicionado 1, ele se tornará 2. Para calcular, eu corro:

rownum=`$nextnum+1 | bc`

mas obteve erro:

1+1: command not found

Eu apenas falhei na parte do cálculo. Eu tentei mudar o backtick, mas ainda não funciona. Não tenho idéia de como calcular variáveis ​​e enviá-lo para outra variável.

apasajja
fonte
11
Dê uma olhada em unix.stackexchange.com/questions/40786/…
Ulrich Dangel

Respostas:

21

A substring dentro do ` `deve ser um comando válido:

rownum=`echo $nextnum+1 | bc`

Mas é preferível usar em $( )vez de ` `:

rownum=$(echo $nextnum+1 | bc)

Mas não há necessidade bc, o shell é capaz de fazer aritmética inteira :

rownum=$((nextnum+1))

Ou ainda mais simples bashe ksh:

((rownum=nextnum+1))
homem a trabalhar
fonte
8

Você também pode usar aritmética integrada no bash:

rownum=$((nextnum+1))

o que seria um pouco mais rápido.

Julian
fonte
2

Absolutamente certo e complete as soluções sugeridas, apenas para mencionar a maneira como isso deve ser feito nos tempos antigos, quando apenas o Bourne-Shell estava disponível, é assim que ele gosta:

rownum=`expr $nextnum + 1` 
Lobo
fonte
1

Eu usaria (como mencionado anteriormente) rownum=$((nextnum+1))ou, ((rownum=nextnum+1))mas se você preferir um comando padrão, poderá usar o comando let, comolet rownum=$nextnum+1

Hola Soy Edu Feliz Navidad
fonte
11
Chamar letum "comando padrão" é muito enganador. $((…))é a sintaxe padrão (POSIX), enquanto leté uma extensão ksh (e bash, zsh).
Gilles 'SO- stop be evil'