Kuinka lisätä paikallista muuttujaa Bashissa?

Tiedot

1 \begin{document} 3 

Koodi

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

joka palauttaa 2, mutta haluan 3. Muutan loppua epäonnistuneesti tällä vastauksella noin miten voin lisätä lukuja bash-komentosarjaan :

START2=$((getStart+1)) 

Kuinka voit lisätä paikallista muuttujaa Bash-komentosarjassa?

Kommentit

  • I ' m saa koodista 2, ei 1.
  • Anteeksi virhe!
  • POIS: miksi awk? sed -n '/begin{document}/{=;q}' data.text paljon lyhyempi …
  • @Costas Kyllä, olet oikeassa! Minulla on ollut huono päivä ajatella liian monimutkaista. Ajattelen nyt tätä asiaa avoimien jaksojen ajan: unix.stackexchange.com/q/229060/16920 Voitteko selittää }/{=;q} tämä vastauksessa / kommentissa, kiitos?

Vastaa

Saan 2 koodistasi. Voit kuitenkin käyttää samaa tekniikkaa mille tahansa muuttujalle tai numerolle:

local start=1 (( start++ )) 

tai

(( ++start )) 

tai

(( start += 1 )) 

tai

(( start = start + 1 )) 

tai vain

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

jne.

Kommentit

vastaus

Yritä:

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

$(( )) kertoo bashille, että sen on suoritettava aritmeettinen operaatio, kun taas backticks käskee bashia arvioimaan sisältävän lausekkeen, i t käyttäjän määrittelemä toiminto tai kutsu ulkoiselle ohjelmalle ja palauta stdoutin sisältö.

Vastaa

Tämä on turvallinen veto

(( start = start + 1 )) 

Jos tuloksena oleva arvo ei ole nolla, poistumisvirheen asettaminen virheen lopettaa komentosarjan

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *