Вычислить переменную и вывести ее в другую переменную


10

Единственный калькулятор, который я знаю, это bc. Я хочу добавить 1в переменную и выводить в другую переменную.

Я получил nextnumпеременную от подсчета строки в файле:

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

Скажем, nextnumценность есть 1. Когда добавлено с 1, это станет 2. Чтобы рассчитать, я бегу:

rownum=`$nextnum+1 | bc`

но получил ошибку:

1+1: command not found

Я просто не смог в расчетной части. Я попытался изменить backtick, но все еще не работает. Я понятия не имею, как рассчитать переменные и вывести его в другую переменную.


Ответы:


21

Подстрока внутри ` `должна быть действительной командой:

rownum=`echo $nextnum+1 | bc`

Но предпочтительнее использовать $( )вместо ` `:

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

Но в этом нет необходимости bc, оболочка умеет делать целочисленную арифметику:

rownum=$((nextnum+1))

Или еще проще в bashи ksh:

((rownum=nextnum+1))

8

Вы также можете использовать встроенную арифметику в bash:

rownum=$((nextnum+1))

который был бы немного быстрее.


2

Абсолютно правильно и дополните предложенные решения, просто упомянув, как это должно было быть сделано в прежние времена, когда была доступна только Bourne-Shell, вот как это нравится:

rownum=`expr $nextnum + 1` 

1

Я бы использовал (как упоминалось ранее) rownum=$((nextnum+1))или, ((rownum=nextnum+1))но если вы предпочитаете стандартную команду, вы можете использовать команду let, например,let rownum=$nextnum+1


1
Называть let«стандартную команду» очень обманчиво. $((…))является стандартным (POSIX) синтаксисом, тогда как letявляется расширением ksh (и bash, zsh).
Жиль "ТАК ... перестать быть злым"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.