Comment incrémenter une variable locale dans Bash?

13

Les données

1
\begin{document}
3

Code

#!/bin/bash

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

START2=$(getStart)
echo $START2

qui revient 2mais je veux 3. Je change sans succès la fin par cette réponse sur Comment puis-je ajouter des nombres dans un script bash :

START2=$((getStart+1))

Comment pouvez-vous incrémenter une variable locale dans le script Bash?

Léo Léopold Hertz 준영
la source
Je reçois 2, pas 1, du code.
choroba
Désolé mon erreur!
Léo Léopold Hertz 준영
1
OFF: pourquoi awk? sed -n '/begin{document}/{=;q}' data.textbeaucoup plus court…
Costas
@Costas Oui, vous avez raison! J'ai eu aujourd'hui une mauvaise journée à penser trop compliqué. Penser maintenant la chose ici pour les intervalles ouverts: unix.stackexchange.com/q/229060/16920 Pouvez-vous expliquer }/{=;q}cela dans une réponse / commentaire, s'il vous plaît?
Léo Léopold Hertz 준영

Réponses:

35

Je reçois 2de votre code. Néanmoins, vous pouvez utiliser la même technique pour n'importe quelle variable ou nombre:

local start=1
(( start++ ))

ou

(( ++start ))

ou

(( start += 1 ))

ou

(( start = start + 1 ))

ou juste

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

etc.

choroba
la source
Cela peut également aider: askubuntu.com/questions/385528/…
Bruno Bieri
3

Essayer:

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

Le $(( ))indique à bash qu'il doit effectuer une opération arithmétique, tandis que les astuces indiquent à bash d'évaluer l'expression contenant, que ce soit une fonction définie par l'utilisateur ou un appel à un programme externe, et retourner le contenu de stdout.

SpaghettiCoder
la source