Làm thế nào để tăng biến cục bộ trong Bash?


13

Dữ liệu

1
\begin{document}
3

#!/bin/bash

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

START2=$(getStart)
echo $START2

Trả lại 2nhưng tôi muốn 3. Tôi thay đổi kết thúc không thành công bằng câu trả lời này về Làm thế nào tôi có thể thêm số trong tập lệnh bash :

START2=$((getStart+1))

Làm thế nào bạn có thể tăng một biến cục bộ trong tập lệnh Bash?


Tôi nhận được 2, không phải 1, từ mã.
choroba

Xin lỗi, là lỗi của tôi!
Léo Léopold Hertz

1
TẮT: tại sao awk? sed -n '/begin{document}/{=;q}' data.textngắn hơn nhiều
Costas

@Costas Vâng, bạn nói đúng! Tôi đã có một ngày tồi tệ trong suy nghĩ quá phức tạp. Bây giờ hãy suy nghĩ điều ở đây cho các khoảng thời gian mở: unix.stackexchange.com/q/229060/16920 Bạn có thể giải thích }/{=;q}điều này trong một câu trả lời / nhận xét không?
Léo Léopold Hertz

Câu trả lời:


35

Tôi đang nhận được 2từ mã của bạn. Tuy nhiên, bạn có thể sử dụng cùng một kỹ thuật cho bất kỳ biến hoặc số nào:

local start=1
(( start++ ))

hoặc là

(( ++start ))

hoặc là

(( start += 1 ))

hoặc là

(( start = start + 1 ))

hoặc chỉ

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

Vân vân.


Điều này cũng có thể giúp: askubfox.com/questions/385528/ Kẻ
Bruno Bieri

3

Thử:

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

Các $(( ))bảo bash rằng nó là để thực hiện một hoạt động số học, trong khi backticks nói bash để đánh giá biểu thức chứa, có thể là một chức năng người dùng định nghĩa hoặc một cuộc gọi đến một chương trình bên ngoài, và trả lại nội dung của stdout.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.