Oblicz zmienną i wyślij ją do innej zmiennej

10

Jedyny kalkulator, jaki znam bc. Chcę dodać 1do zmiennej i wyprowadzić do innej zmiennej.

Mam nextnumzmienną z liczenia łańcucha w pliku:

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

Powiedzmy, że nextnumwartość jest 1. Po dodaniu z 1, stanie się 2. Aby obliczyć, uruchamiam:

rownum=`$nextnum+1 | bc`

ale dostał błąd:

1+1: command not found

Właśnie zawiodłem w części obliczeniowej. Próbowałem zmienić backtick, ale nadal nie działa. Nie mam pojęcia, jak obliczyć zmienne i wyprowadzić je do innej zmiennej.

apasajja
źródło
1
Spójrz na unix.stackexchange.com/questions/40786/...
Ulrich Dangel

Odpowiedzi:

21

Podciąg wewnątrz ` `musi być prawidłowym poleceniem:

rownum=`echo $nextnum+1 | bc`

Ale lepiej jest używać $( )zamiast ` `:

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

Ale nie ma takiej potrzeby bc, powłoka może wykonywać arytmetykę liczb całkowitych :

rownum=$((nextnum+1))

Lub w jeszcze prostszy bashi ksh:

((rownum=nextnum+1))
człowiek w pracy
źródło
8

Możesz także użyć wbudowanej arytmetyki w bash:

rownum=$((nextnum+1))

co byłoby nieco szybsze.

juliański
źródło
2

Absolutnie słuszne i uzupełnij sugerowane rozwiązania, aby wspomnieć o sposobie, w jaki trzeba to robić w dawnych czasach, gdy dostępna była tylko powłoka Bourne-Shell, właśnie tak to lubi:

rownum=`expr $nextnum + 1` 
Wilk
źródło
1

Chciałbym używać (jak wspomniano wcześniej) rownum=$((nextnum+1))albo ((rownum=nextnum+1))ale jeśli wolisz standardowe polecenia można użyć komendy let, jaklet rownum=$nextnum+1

Hola Soy Edu Feliz Navidad
źródło
1
Wywołanie let„standardowego polecenia” jest bardzo mylące. $((…))jest standardową składnią (POSIX), natomiast letjest rozszerzeniem ksh (i bash, zsh).
Gilles 'SO - przestań być zły'