Wie inkrementiere ich lokale Variablen in Bash?

13

Daten

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

was zurückkommt 2aber ich will 3. Ich ändere das Ende erfolglos durch diese Antwort über Wie kann ich Zahlen in ein Bash-Skript einfügen :

START2=$((getStart+1))

Wie können Sie eine lokale Variable im Bash-Skript erhöhen?

Léo Léopold Hertz 준영
quelle
Ich erhalte 2, nicht 1 aus dem Code.
Choroba
Entschuldigung, mein Fehler!
Léo Léopold Hertz 준영
1
AUS: warum awk? sed -n '/begin{document}/{=;q}' data.textviel kürzer ...
Costas
@Costas Ja, du hast recht! Ich hatte heute einen schlechten Tag im Denken zu kompliziert. Denken Sie jetzt die Sache hier für offene Intervalle: unix.stackexchange.com/q/229060/16920 Können Sie }/{=;q}dies bitte in einer Antwort / Kommentar erklären ?
Léo Léopold Hertz 준영

Antworten:

35

Ich bekomme 2von Ihrem Code. Trotzdem können Sie dieselbe Technik für jede Variable oder Zahl anwenden:

local start=1
(( start++ ))

oder

(( ++start ))

oder

(( start += 1 ))

oder

(( start = start + 1 ))

oder nur

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

etc.

Choroba
quelle
Dies kann auch helfen: askubuntu.com/questions/385528/…
Bruno Bieri
3

Versuchen:

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

Die $(( ))Tells-Bash weist die Bash an, eine arithmetische Operation auszuführen, während die Backticks die Bash anweisen, den enthaltenen Ausdruck auszuwerten, sei es eine benutzerdefinierte Funktion oder ein Aufruf eines externen Programms, und den Inhalt von stdout zurückzugeben.

SpaghettiCoder
quelle