Como incrementar a variável local no Bash?

Dados

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 retorna 2, mas eu quero 3. Mudei sem sucesso o final com esta resposta sobre Como posso adicionar números em um script bash :

START2=$((getStart+1)) 

Como você pode incrementar uma variável local no script Bash?

Comentários

  • I ' estou obtendo 2, não 1, do código.
  • Desculpe, meu erro!
  • OFF: por que awk? sed -n '/begin{document}/{=;q}' data.text muito mais curto…
  • @Costas Sim, você está certo! Tive hoje um dia ruim pensando muito complicado. Pensando agora em intervalos abertos: unix.stackexchange.com/q/229060/16920 Você pode explicar }/{=;q} isso em uma resposta / comentário, por favor?

Resposta

Estou recebendo 2 do seu código. No entanto, você pode usar a mesma técnica para qualquer variável ou número:

local start=1 (( start++ )) 

ou

(( ++start )) 

ou

(( start += 1 )) 

ou

(( start = start + 1 )) 

ou apenas

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

etc.

Comentários

Resposta

Experimente:

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

O $(( )) diz ao bash que deve realizar uma operação aritmética, enquanto os crases dizem ao bash para avaliar a expressão contida, be i t uma função definida pelo usuário ou uma chamada para um programa externo e retornar o conteúdo de stdout.

Resposta

Este é a aposta segura

(( start = start + 1 )) 

Se o valor resultante for diferente de zero, definir a saída em caso de erro interromperá seu script

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *