Come incrementare la variabile locale in Bash?

Dati

1 \begin{document} 3 

Codice

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

che restituisce 2 ma voglio 3. Ho cambiato senza successo la fine con questa risposta su Come posso aggiungere numeri in uno script bash :

START2=$((getStart+1)) 

Come puoi incrementare una variabile locale nello script Bash?

Commenti

  • I ' sto ottenendo 2, non 1, dal codice.
  • Scusa il mio errore!
  • OFF: why awk? sed -n '/begin{document}/{=;q}' data.text molto più breve…
  • @Costas Sì, hai ragione! Oggi ho avuto una brutta giornata pensando troppo complicato. Pensando ora alla cosa qui per gli intervalli aperti: unix.stackexchange.com/q/229060/16920 Puoi spiegare }/{=;q} questo in una risposta / commento, per favore?

Risposta

Sto ottenendo 2 dal codice. Tuttavia, puoi utilizzare la stessa tecnica per qualsiasi variabile o numero:

local start=1 (( start++ )) 

o

(( ++start )) 

o

(( start += 1 )) 

o

(( start = start + 1 )) 

o semplicemente

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

ecc.

Commenti

Risposta

Prova:

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

Il $(( )) dice a bash che deve eseguire unoperazione aritmetica, mentre i backtick dicono a bash di valutare lespressione contenitore, essere i t una funzione definita dallutente o una chiamata a un programma esterno e restituisce il contenuto di stdout.

Answer

Questo è la scommessa sicura

(( start = start + 1 )) 

Se il valore risultante è diverso da zero, limpostazione di uscita in caso di errore interromperà lo script

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *