Berechnen Sie die Variable und geben Sie sie an eine andere Variable aus

10

Der einzige Taschenrechner, den ich kenne, ist bc. Ich möchte 1einer Variablen hinzufügen und in eine andere Variable ausgeben.

Ich habe die nextnumVariable vom Zählen der Zeichenfolge in einer Datei erhalten:

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

Nehmen wir an, der nextnumWert ist 1. Wenn mit hinzugefügt 1, wird es 2. Um zu berechnen, laufe ich:

rownum=`$nextnum+1 | bc`

habe aber Fehler bekommen:

1+1: command not found

Ich habe gerade im Berechnungsteil versagt. Ich habe versucht, den Backtick zu ändern, funktioniert aber immer noch nicht. Ich habe keine Ahnung, wie man Variablen berechnet und an eine andere Variable ausgibt.

Apasajja
quelle
1
Werfen
Ulrich Dangel

Antworten:

21

Die Teilzeichenfolge in ` `muss ein gültiger Befehl sein:

rownum=`echo $nextnum+1 | bc`

Ist aber vorzuziehen, $( )anstatt zu verwenden ` `:

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

Es besteht jedoch keine Notwendigkeit bc, die Shell kann ganzzahlige Arithmetik ausführen:

rownum=$((nextnum+1))

Oder noch einfacher in bashund ksh:

((rownum=nextnum+1))
Mann bei der Arbeit
quelle
8

Sie können auch die eingebaute Arithmetik in bash verwenden:

rownum=$((nextnum+1))

das wäre etwas schneller.

julianisch
quelle
2

Absolut richtig und vervollständigen Sie die vorgeschlagenen Lösungen, um nur zu erwähnen, wie es früher gemacht werden musste, als nur die Bourne-Shell verfügbar war, so gefällt es:

rownum=`expr $nextnum + 1` 
Wolf
quelle
1

Ich würde verwenden (wie bereits erwähnt) rownum=$((nextnum+1))oder ((rownum=nextnum+1))aber wenn Sie einen Standardbefehl bevorzugen, können Sie den Befehl let verwenden, wie zlet rownum=$nextnum+1

Hola Soja Edu Feliz Navidad
quelle
1
Das Aufrufen leteines „Standardbefehls“ ist sehr irreführend. $((…))ist eine Standardsyntax (POSIX), während letes sich um eine ksh- (und bash-, zsh-) Erweiterung handelt.
Gilles 'SO - hör auf böse zu sein'