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?

4
  • I'm getting 2, not 1, from the code.
    – choroba
    Commented Sep 11, 2015 at 13:03
  • Sorry my mistake! Commented Sep 11, 2015 at 13:13
  • 1
    OFF: why awk? sed -n '/begin{document}/{=;q}' data.text much shorter…
    – Costas
    Commented Sep 11, 2015 at 13:46
  • @Costas Yes, you are right! I have had today a bad day in thinking too complicated. Thinking now the thing here for open intervals: unix.stackexchange.com/q/229060/16920 Can you explain }/{=;q} this in an answer/comment, please? Commented Sep 11, 2015 at 13:47

3 Answers 3

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.

1
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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .