Jak zwiększyć zmienną lokalną w Bash?

13

Dane

1
\begin{document}
3

Kod

#!/bin/bash

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

START2=$(getStart)
echo $START2

która wraca, 2ale chcę 3. Bezskutecznie zmieniam koniec odpowiedzią dotyczącą tego, jak mogę dodawać liczby w skrypcie bash :

START2=$((getStart+1))

Jak można zwiększyć lokalną zmienną w skrypcie Bash?

Léo Léopold Hertz 준영
źródło
Dostaję 2, a nie 1, z kodu.
choroba
Przepraszam, mój błąd!
Léo Léopold Hertz 준영
1
OFF: dlaczego awk? sed -n '/begin{document}/{=;q}' data.textznacznie krótszy…
Costas
@Casas Tak, masz rację! Miałem dziś zły dzień w myśleniu zbyt skomplikowanym. Zastanawiam się teraz nad otwartymi interwałami: unix.stackexchange.com/q/229060/16920 Czy możesz }/{=;q}to wyjaśnić w odpowiedzi / komentarzu?
Léo Léopold Hertz 준영

Odpowiedzi:

36

Dostaję 2z twojego kodu. Niemniej jednak możesz użyć tej samej techniki dla dowolnej zmiennej lub liczby:

local start=1
(( start++ ))

lub

(( ++start ))

lub

(( start += 1 ))

lub

(( start = start + 1 ))

Lub tylko

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

itp.

choroba
źródło
Może to również pomóc: askubuntu.com/questions/385528/...
Bruno Bieri,
3

Próbować:

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

$(( ))Mówi bash, że jest do wykonywania operacji arytmetycznej, a backticks mówi bash ocena ekspresji zawierający, czy to funkcję zdefiniowaną przez użytkownika lub połączenia do zewnętrznego programu i powrót zawartość standardowe wyjście.

SpaghettiCoder
źródło