Comment incrémenter une variable locale dans Bash?

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 renvoie 2 mais je veux 3. Je modifie sans succès la fin par cette réponse sur Comment puis-je ajouter des nombres dans un script bash :

START2=$((getStart+1)) 

Comment incrémenter une variable locale dans un script Bash?

Commentaires

  • I ' m obtient 2, pas 1, du code.
  • Désolé mon erreur!
  • OFF: pourquoi awk? sed -n '/begin{document}/{=;q}' data.text beaucoup plus court…
  • @Costas Oui, vous avez raison! Jai eu aujourdhui une mauvaise journée en pensant trop compliqué. En pensant maintenant à la chose ici pour les intervalles ouverts: unix.stackexchange.com/q/229060/16920 Pouvez-vous expliquer }/{=;q} ceci dans une réponse / un commentaire, sil vous plaît?

Réponse

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

local start=1 (( start++ )) 

ou

(( ++start )) 

ou

(( start += 1 )) 

ou

(( start = start + 1 )) 

ou simplement

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

etc.

Commentaires

Réponse

Essayez:

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

Le $(( )) dit à bash quil doit effectuer une opération arithmétique, tandis que les backticks indiquent à bash dévaluer lexpression contenant, be i t une fonction définie par lutilisateur ou un appel à un programme externe, et renvoyer le contenu de stdout.

Answer

Cest la valeur sûre

(( start = start + 1 )) 

Si la valeur résultante est différente de zéro, alors la définition de exit en cas derreur arrêtera Votre script

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *