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?


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.



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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.