13

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?

  • I'm getting 2, not 1, from the code. – choroba Sep 11 '15 at 13:03
  • Sorry my mistake! – Léo Léopold Hertz 준영 Sep 11 '15 at 13:13
  • 1
    OFF: why awk? sed -n '/begin{document}/{=;q}' data.text much shorter… – Costas Sep 11 '15 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? – Léo Léopold Hertz 준영 Sep 11 '15 at 13:47
35

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.

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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