Calculer une variable et la transmettre à une autre variable


10

La seule calculatrice que je connaisse est bc. Je veux ajouter 1à une variable et sortir vers une autre variable.

J'ai obtenu la nextnumvariable en comptant la chaîne dans un fichier:

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

Disons que la nextnumvaleur est 1. Une fois ajouté avec 1, il deviendra 2. Pour calculer, je lance:

rownum=`$nextnum+1 | bc`

mais a obtenu une erreur:

1+1: command not found

Je viens d'échouer dans la partie calcul. J'ai essayé de changer le backtick mais ne fonctionne toujours pas. Je n'ai aucune idée de la façon de calculer les variables et de les exporter vers une autre variable.


Réponses:


21

La sous-chaîne à l'intérieur du ` `doit être une commande valide elle-même:

rownum=`echo $nextnum+1 | bc`

Mais il est préférable d'utiliser $( )au lieu de ` `:

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

Mais ce n'est pas nécessaire bc, le shell est capable de faire de l' arithmétique entière :

rownum=$((nextnum+1))

Ou encore plus simple bashet ksh:

((rownum=nextnum+1))

8

Vous pouvez également utiliser l'arithmétique intégrée dans bash:

rownum=$((nextnum+1))

ce qui serait un peu plus rapide.


2

Absolument juste et complétez les solutions suggérées, juste pour mentionner la façon dont cela devait être fait dans les temps anciens où seul le Bourne-Shell était disponible, c'est ainsi qu'il l'aime:

rownum=`expr $nextnum + 1` 

1

J'utiliserais (comme cela a été mentionné précédemment) rownum=$((nextnum+1))ou ((rownum=nextnum+1))mais si vous préférez une commande standard, vous pouvez utiliser la commande let, commelet rownum=$nextnum+1


1
Appeler letune «commande standard» est très trompeur. $((…))est la syntaxe standard (POSIX) alors que letc'est une extension ksh (et bash, zsh).
Gilles 'SO- arrête d'être méchant'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.