Bagaimana cara meningkatkan variabel lokal di Bash?

13

Data

1
\begin{document}
3

Kode

#!/bin/bash

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

START2=$(getStart)
echo $START2

yang kembali 2tetapi saya inginkan 3. Saya tidak berhasil mengubah akhirnya dengan jawaban ini tentang Bagaimana saya bisa menambahkan angka dalam skrip bash :

START2=$((getStart+1))

Bagaimana Anda bisa meningkatkan variabel lokal dalam skrip Bash?

Léo Léopold Hertz 준영
sumber
Saya mendapatkan 2, bukan 1, dari kode.
choroba
Maaf kesalahan saya!
Léo Léopold Hertz 준영
1
OFF: mengapa awk? sed -n '/begin{document}/{=;q}' data.textjauh lebih pendek ...
Costas
@Costas Ya, Anda benar! Hari ini aku mengalami hari yang buruk dalam berpikir terlalu rumit. Berpikir sekarang hal di sini untuk interval terbuka: unix.stackexchange.com/q/229060/16920 Bisakah Anda menjelaskan }/{=;q}ini dalam jawaban / komentar, tolong?
Léo Léopold Hertz 준영

Jawaban:

35

Saya dapatkan 2dari kode Anda. Namun demikian, Anda dapat menggunakan teknik yang sama untuk variabel atau angka apa pun:

local start=1
(( start++ ))

atau

(( ++start ))

atau

(( start += 1 ))

atau

(( start = start + 1 ))

atau hanya

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

dll.

choroba
sumber
Ini juga dapat membantu: askubuntu.com/questions/385528/…
Bruno Bieri
3

Mencoba:

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

The $(( ))memberitahu bash yang itu adalah untuk melakukan operasi aritmatika, sedangkan backticks mengatakan bash untuk mengevaluasi ekspresi yang mengandung, baik itu fungsi user-defined atau panggilan untuk program eksternal, dan kembali isi stdout.

SpaghettiCoder
sumber