¿Cómo incrementar la variable local en Bash?

Datos

1 \begin{document} 3 

Código

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

que devuelve 2 pero quiero 3. Cambio sin éxito el final con esta respuesta sobre ¿Cómo puedo agregar números en un script bash :

START2=$((getStart+1)) 

¿Cómo se puede incrementar una variable local en el script Bash?

Comentarios

  • I ' obtengo 2, no 1, del código.
  • ¡Disculpe mi error!
  • APAGADO: por qué awk? sed -n '/begin{document}/{=;q}' data.text mucho más corto…
  • @Costas ¡Sí, tienes razón! Hoy he tenido un mal día pensando demasiado complicado. Pensando ahora en lo que hay aquí para los intervalos abiertos: unix.stackexchange.com/q/229060/16920 ¿Puede explicarnos }/{=;q} esto en una respuesta / comentario, por favor.

Responder

Estoy recibiendo 2 de su código. Sin embargo, puede usar la misma técnica para cualquier variable o número:

local start=1 (( start++ )) 

o

(( ++start )) 

o

(( start += 1 )) 

o

(( start = start + 1 )) 

o simplemente

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

etc.

Comentarios

Respuesta

Pruebe:

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

El $(( )) le dice a bash que debe realizar una operación aritmética, mientras que las comillas invertidas le dicen a bash que evalúe la expresión contenedora, ya sea t una función definida por el usuario o una llamada a un programa externo, y devuelve el contenido de stdout.

Responder

Esto es la apuesta segura

(( start = start + 1 )) 

Si el valor resultante es distinto de cero, la configuración de salir en caso de error detendrá su secuencia de comandos

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *