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.

apasajja
la source
1
Jetez un œil à unix.stackexchange.com/questions/40786/…
Ulrich Dangel

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))
homme au travail
la source
8

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

rownum=$((nextnum+1))

ce qui serait un peu plus rapide.

julien
la source
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` 
Loup
la source
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

Hola Soy Edu Feliz Navidad
la source
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'