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
, das 2
zurückgibt, aber ich möchte 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 inkrementieren?
Kommentare
- I ' Ich erhalte 2, nicht 1, aus dem Code.
- Entschuldigung, mein Fehler!
- AUS: Warum
awk
?sed -n '/begin{document}/{=;q}' data.text
viel kürzer … - @Costas Ja, Sie haben Recht! Ich hatte heute einen schlechten Tag damit, zu kompliziert zu denken. 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 / einem Kommentar?
Antwort
Ich erhalte 2
aus Ihrem Code. Sie können jedoch dieselbe Technik für jede Variable oder Zahl verwenden:
local start=1 (( start++ ))
oder
(( ++start ))
oder
(( start += 1 ))
oder
(( start = start + 1 ))
oder nur
local start=1 echo $(( start + 1 ))
usw.
Kommentare
- Dies kann auch hilfreich sein: askubuntu.com/questions/385528/…
Antwort
Versuchen Sie:
START2=$(( `getStart` + 1 ));
Die $(( ))
teilt bash mit, dass eine arithmetische Operation ausgeführt werden soll, während die Backticks bash anweisen, den enthaltenen Ausdruck auszuwerten, sei i t eine benutzerdefinierte Funktion oder einen Aufruf eines externen Programms und geben Sie den Inhalt von stdout zurück.
Antwort
Dies ist die sichere Wette
(( start = start + 1 ))
Wenn der resultierende Wert ungleich Null ist, stoppt das Setzen von exit bei Fehler Ihr Skript
set -e start=0 (( start++ )) echo You will never get here