Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The only calculator I know is bc. I want to add 1 to a variable, and output to another variable.

I got the nextnum variable from counting string in a file:

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

Lets say the nextnum value is 1. When added with 1, it will become 2. To calculate, I run:

rownum=`$nextnum+1 | bc`

but got error:

1+1: command not found

I just failed in calculation part. I've tried changing the backtick but still not works. I have no idea how to calculate variables and output it to another variable.

share|improve this question
Have a look at unix.stackexchange.com/questions/40786/… – Ulrich Dangel Oct 8 '12 at 10:08
up vote 10 down vote accepted

The substring inside the ` ` must be a valid command itself:

rownum=`echo $nextnum+1 | bc`

But is preferable to use $( ) instead of ` `:

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

But there is no need for bc, the shell is able to do integer arithmetic:


Or even simpler in bash and ksh:

share|improve this answer

You can also use built in arithmetic in bash


which would be slightly faster

share|improve this answer

I would use (as was mentioned before) rownum=$((nextnum+1)) or ((rownum=nextnum+1)) but if you prefer an standard command you can use the let command, like let rownum=$nextnum+1

share|improve this answer
Calling let a “standard command” is very misleading. $((…)) is standard (POSIX) syntax whereas let is a ksh (and bash, zsh) extension. – Gilles Oct 8 '12 at 23:07

Absolutely right and complete the suggested solutions, just to mention the way it has to be done in former times when only the Bourne-Shell was available, that's the way it likes it:

rownum=`expr $nextnum + 1` 
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.