Jak zvýšit lokální proměnnou v Bash?

Data

1 \begin{document} 3 

Kód

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

který vrací 2, ale chci 3. Konec neúspěšně změním touto odpovědí o Jak mohu přidat čísla do bash skriptu :

START2=$((getStart+1)) 

Jak můžete zvýšit místní proměnnou ve skriptu Bash?

Komentáře

  • I ' m z kódu 2, ne 1.
  • Omlouvám se, moje chyba!
  • VYPNUTO: proč awk? sed -n '/begin{document}/{=;q}' data.text mnohem kratší …
  • @Costas Ano, máte pravdu! Měl jsem dnes špatný den v příliš komplikovaném myšlení. Přemýšlím nyní nad otevřenými intervaly: unix.stackexchange.com/q/229060/16920 Můžete vysvětlit }/{=;q} toto prosím v odpovědi / komentáři?

odpověď

dostávám 2 ze svého kódu. Pro libovolnou proměnnou nebo číslo však můžete použít stejnou techniku:

local start=1 (( start++ )) 

nebo

(( ++start )) 

nebo

(( start += 1 )) 

nebo

(( start = start + 1 )) 

nebo jen

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

atd.

Komentáře

Odpověď

Zkuste:

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

$(( )) říká bash, že má provést aritmetickou operaci, zatímco backticks řekne bash, aby vyhodnotil obsahující výraz, ať Uživatelem definovaná funkce nebo volání externího programu a vrácení obsahu standardního výstupu.

Odpověď

Toto je bezpečná sázka

(( start = start + 1 )) 

Pokud je výsledná hodnota nenulová, pak nastavení ukončení při chybě zastaví váš skript

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *