Hoe de lokale variabele in Bash te verhogen?

Gegevens

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 

die 2 retourneert maar ik wil 3. Ik verander het einde tevergeefs door dit antwoord over Hoe kan ik getallen toevoegen in een bash-script :

START2=$((getStart+1)) 

Hoe kun je een lokale variabele in het Bash-script verhogen?

Reacties

  • I ' m haal 2, niet 1, uit de code.
  • Sorry, mijn fout!
  • UIT: waarom awk? sed -n '/begin{document}/{=;q}' data.text veel korter …
  • @Costas Ja, je hebt gelijk! Ik heb vandaag een slechte dag gehad door te gecompliceerd te denken. Denk hier nu aan voor open intervallen: unix.stackexchange.com/q/229060/16920 Kun je uitleggen }/{=;q} dit in een antwoord / opmerking, alstublieft?

Antwoord

Ik “krijg 2 uit uw code. Desalniettemin kunt u dezelfde techniek gebruiken voor elke variabele of getal:

local start=1 (( start++ )) 

of

(( ++start )) 

of

(( start += 1 )) 

of

(( start = start + 1 )) 

of gewoon

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

etc.

Reacties

Antwoord

Probeer:

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

De $(( )) vertelt bash dat het een rekenkundige bewerking moet uitvoeren, terwijl de backticks bash vertellen om de bevattende uitdrukking te evalueren, oftewel t een door de gebruiker gedefinieerde functie of een aanroep naar een extern programma, en retourneer de inhoud van stdout.

Answer

Dit is de veilige weddenschap

(( start = start + 1 )) 

Als de resulterende waarde niet nul is, zal het instellen van exit on error uw script stoppen

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *