15

Data

1
\begin{document}
3

Code

#!/bin/bash

function getStart {
        local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
        echo $START
}

START2=$(getStart)
echo $START2

which returns 2 but I want 3. I change unsuccessfully the end by this answer about How can I add numbers in a bash script:

START2=$((getStart+1))

How can you increment a local variable in Bash script?

3 Answers3

41

I'm getting 2 from your code. Nevertheless, you can use the same technique for any variable or number:

local start=1
(( start++ ))

or

(( ++start ))

or

(( start += 1 ))

or

(( start = start + 1 ))

or just

local start=1
echo $(( start + 1 ))

etc.

choroba
  • 47,233
3

Try:

START2=$(( `getStart` + 1 ));

The $(( )) tells bash that it is to perform an arithmetic operation, while the backticks tells bash to evaluate the containing expression, be it an user-defined function or a call to an external program, and return the contents of stdout.

1

This is the safe bet

(( start = start + 1 ))

If the resulting value is non zero, then setting exit on error will stop Your script

set -e
start=0
(( start++ ))
echo You will never get here