Hvordan øges den lokale variabel i Bash?

Data

1 \begin{document} 3 

Kode

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

som returnerer 2 men jeg vil have 3. Jeg ændrer uden held slutningen med dette svar om Hvordan kan jeg tilføje tal i et bash-script :

START2=$((getStart+1)) 

Hvordan kan du øge en lokal variabel i Bash-script?

Kommentarer

  • I ' Jeg får 2, ikke 1, fra koden.
  • Undskyld min fejl!
  • FRA: hvorfor awk? sed -n '/begin{document}/{=;q}' data.text meget kortere …
  • @Costas Ja, du har ret! Jeg har haft i dag en dårlig dag med at tænke for kompliceret. Tænker nu på ting her for åbne intervaller: unix.stackexchange.com/q/229060/16920 Kan du forklare }/{=;q} dette i et svar / en kommentar, tak?

Svar

Jeg får 2 fra din kode. Ikke desto mindre kan du bruge den samme teknik til enhver variabel eller nummer:

local start=1 (( start++ )) 

eller

(( ++start )) 

eller

(( start += 1 )) 

eller

(( start = start + 1 )) 

eller bare

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

osv.

Kommentarer

Svar

Prøv:

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

$(( )) fortæller bash, at det er at udføre en aritmetisk operation, mens backticks fortæller bash at evaluere det indeholdende udtryk, være i t en brugerdefineret funktion eller et opkald til et eksternt program, og returner indholdet af stdout.

Svar

Dette er den sikre indsats

(( start = start + 1 )) 

Hvis den resulterende værdi ikke er nul, stopper indstillingen af exit på fejl Dit script

set -e start=0 (( start++ )) echo You will never get here 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *