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?


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.