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
    Sep 11 '15 at 13:03
  • Sorry my mistake! 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? Sep 11 '15 at 13:47
40

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.

0

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

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.