Cum se incrementează variabila locală în Bash?

Date

1 \begin{document} 3 

Cod

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

care returnează 2 dar vreau 3. Schimb fără succes sfârșitul prin acest răspuns despre Cum pot adăuga numere într-un script bash :

START2=$((getStart+1)) 

Cum puteți incrementa o variabilă locală în scriptul Bash?

Comentarii

  • I primesc 2, nu 1, din cod.
  • Ne pare rău greșeala mea!
  • OFF: de ce awk? sed -n '/begin{document}/{=;q}' data.text mult mai scurt …
  • @Costas Da, ai dreptate! Am avut astăzi o zi proastă când am gândit prea complicat. Acum ne gândim la acest lucru pentru intervale deschise: unix.stackexchange.com/q/229060/16920 Puteți explica }/{=;q} asta într-un răspuns / comentariu, vă rog?

Răspundeți

Îmi este 2 din codul dvs. Cu toate acestea, puteți utiliza aceeași tehnică pentru orice variabilă sau număr:

local start=1 (( start++ )) 

sau

(( ++start )) 

sau

(( start += 1 )) 

sau

(( start = start + 1 )) 

sau doar

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

etc.

Comentarii

Răspuns

Încercați:

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

$(( )) spune bash că este să efectueze o operație aritmetică, în timp ce backticks îi spune lui bash să evalueze expresia conținută, fie i t o funcție definită de utilizator sau un apel către un program extern și returnează conținutul stdout.

Răspuns

Acesta este pariul sigur

(( start = start + 1 )) 

Dacă valoarea rezultată este diferită de zero, setarea ieșirii la eroare va opri scriptul dvs.

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *