Wie inkrementiere ich die lokale Variable in Bash?

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

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 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.