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.


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))

8

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

rownum=$((nextnum+1))

co byłoby nieco szybsze.


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` 

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


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'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.