Hur ökar den lokala variabeln i Bash?

Data

1 \begin{document} 3 

Kod

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

som returnerar 2 men jag vill 3. Jag ändrar framgångsrikt slutet med detta svar om Hur kan jag lägga till siffror i ett bash-skript :

START2=$((getStart+1)) 

Hur kan du öka en lokal variabel i Bash-skript?

Kommentarer

  • I ' jag får 2, inte 1, från koden.
  • Ledsen mitt misstag!
  • AV: varför awk? sed -n '/begin{document}/{=;q}' data.text mycket kortare …
  • @Costas Ja, du har rätt! Jag har haft en dålig dag i dag att tänka för komplicerat. Tänker nu saken här för öppna intervaller: unix.stackexchange.com/q/229060/16920 Kan du förklara }/{=;q} detta i ett svar / kommentar, snälla?

Svar

Jag får 2 från din kod. Ändå kan du använda samma teknik för alla variabler eller tal:

local start=1 (( start++ )) 

eller

(( ++start )) 

eller

(( start += 1 )) 

eller

(( start = start + 1 )) 

eller bara

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

etc.

Kommentarer

Svar

Försök:

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

$(( )) säger till bash att det är att utföra en aritmetisk operation, medan backticks ber bash att utvärdera det innehållande uttrycket, vara i t en användardefinierad funktion eller ett samtal till ett externt program och returnera innehållet i stdout.

Svar

Detta är den säkra satsningen

(( start = start + 1 )) 

Om det resulterande värdet inte är noll, stoppar inställningen exit on error Ditt skript

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *