Como incrementar variável local no Bash?

13

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, 2mas eu quero 3. Altero sem êxito o final desta 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?

Léo Léopold Hertz 준영
fonte
Estou recebendo 2, e não 1, do código.
choroba 11/09/15
Desculpe meu erro!
Léo Léopold Hertz,
1
OFF: por quê awk? sed -n '/begin{document}/{=;q}' data.textmuito mais curto ...
Costas
@ Costas Sim, você está certo! Hoje tive um dia ruim em pensar muito complicado. Pensando agora aqui em intervalos abertos: unix.stackexchange.com/q/229060/16920 Você pode explicar }/{=;q}isso em uma resposta / comentário, por favor?
Léo Léopold Hertz,

Respostas:

35

Estou recebendo 2do 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.

choroba
fonte
Isso também pode ajudar: askubuntu.com/questions/385528/…
Bruno Bieri
3

Experimentar:

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

O $(( ))tell bash é para executar uma operação aritmética, enquanto os backticks informam ao bash para avaliar a expressão que contém, seja uma função definida pelo usuário ou uma chamada para um programa externo, e retorne o conteúdo do stdout.

SpaghettiCoder
fonte