Jak zwiększyć lokalną zmienną w Bash?

Dane

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 

co zwraca 2, ale chcę 3. Bezskutecznie zmieniam koniec na tę odpowiedź na temat Jak mogę dodać liczby w skrypcie basha :

START2=$((getStart+1)) 

Jak można zwiększyć lokalną zmienną w skrypcie Bash?

Komentarze

  • I ' m pobieram 2, a nie 1, z kodu.
  • Przepraszam, mój błąd!
  • WYŁ .: dlaczego awk? sed -n '/begin{document}/{=;q}' data.text znacznie krócej…
  • @Costas Tak, masz rację! Miałem dzisiaj zły dzień na zbyt skomplikowane myślenie. Zastanawiam się teraz nad kwestią otwartych okresów: unix.stackexchange.com/q/229060/16920 Czy możesz wyjaśnić }/{=;q} to w odpowiedzi / komentarzu, proszę?

Odpowiedź

Otrzymuję 2 z kodu. Niemniej jednak możesz użyć tej samej techniki dla dowolnej zmiennej lub liczby:

local start=1 (( start++ )) 

lub

(( ++start )) 

lub

(( start += 1 )) 

lub

(( start = start + 1 )) 

lub po prostu

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

itd.

Komentarze

Odpowiedź

Spróbuj:

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

$(( )) mówi bashowi, że ma wykonać operację arytmetyczną, podczas gdy lewy apostrof mówi bashowi, aby obliczył zawarte w nim wyrażenie, be i t funkcja zdefiniowana przez użytkownika lub wywołanie programu zewnętrznego i zwraca zawartość standardowego wyjścia.

Odpowiedź

To jest bezpieczny zakład

(( start = start + 1 )) 

Jeśli wynikowa wartość jest różna od zera, ustawienie wyjścia w przypadku błędu zatrzyma Twój skrypt

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *