Come incrementare la variabile locale in Bash?


13

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 ritorna 2ma voglio 3. Cambio 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?


Ricevo 2, non 1, dal codice.
Choroba,

Scusa, errore mio!
Léo Léopold Hertz

1
OFF: perché awk? sed -n '/begin{document}/{=;q}' data.textmolto più breve ...
Costas,

@Costas Sì, hai ragione! Oggi ho avuto una brutta giornata nel pensare troppo complicato. Pensando ora la cosa qui per intervalli aperti: unix.stackexchange.com/q/229060/16920 Puoi spiegarlo }/{=;q}in una risposta / commento, per favore?
Léo Léopold Hertz

Risposte:


35

Sto ricevendo 2dal tuo 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 solo

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

eccetera.


Questo può anche aiutare: askubuntu.com/questions/385528/…
Bruno Bieri,

3

Provare:

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

Il $(( ))dice bash che è eseguire un'operazione aritmetica, mentre backticks dice bash per valutare l'espressione contenente, sia esso una funzione definita dall'utente o una chiamata a un programma esterno, e restituire il contenuto di stdout.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.