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

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, но все еще не работает. Я понятия не имею, как рассчитать переменные и вывести его в другую переменную.

apasajja
источник
1
Взгляните на unix.stackexchange.com/questions/40786/…
Ульрих

Ответы:

21

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

rownum=`echo $nextnum+1 | bc`

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

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

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

rownum=$((nextnum+1))

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

((rownum=nextnum+1))
manatwork
источник
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).
Жиль "ТАК ... перестать быть злым"