Hvordan øke den lokale variabelen 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 ha 3. Jeg endrer uten hell slutten med dette svaret om Hvordan kan jeg legge til tall i et bash-skript :

START2=$((getStart+1)) 

Hvordan kan du øke en lokal variabel i Bash-skript?

Kommentarer

  • I ' Jeg får 2, ikke 1, fra koden.
  • Beklager feilen min!
  • AV: hvorfor awk? sed -n '/begin{document}/{=;q}' data.text mye kortere …
  • @Costas Ja, du har rett! Jeg har hatt en dårlig dag i dag i å tenke for komplisert. Tenker nå tingen her for åpne intervaller: unix.stackexchange.com/q/229060/16920 Kan du forklare }/{=;q} dette i et svar / kommentar, vær så snill?

Svar

Jeg får 2 fra koden din. Likevel kan du bruke den samme teknikken for hvilken som helst variabel eller tall:

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 )); 

$(( )) forteller bash at det er å utføre en aritmetisk operasjon, mens backticks ber bash å evaluere det inneholdende uttrykket, være i t en brukerdefinert funksjon eller et anrop til et eksternt program, og returner innholdet i stdout.

Svar

Dette er den sikre satsingen

(( start = start + 1 )) 

Hvis den resulterende verdien ikke er null, vil innstillingen exit on error stoppe skriptet ditt

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *