बाश में स्थानीय चर को कैसे बढ़ाया जाए?


13

डेटा

1
\begin{document}
3

कोड

#!/bin/bash

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

START2=$(getStart)
echo $START2

जो रिटर्न 2लेकिन मैं चाहता हूँ 3। मैं इस से असफल अंत बदलने के जवाब के बारे में मैं कैसे एक bash लिपि में संख्या जोड़ सकते हैं :

START2=$((getStart+1))

आप बैश स्क्रिप्ट में एक स्थानीय चर कैसे बढ़ा सकते हैं?


मुझे कोड से 2, 1 नहीं, मिल रहा है।
कोरोबा

माफ कीजिएगा यह मेरी गलती है!
लेओ लेपोल्ड हर्ट्ज़ '

1
उतर: क्यों awk? sed -n '/begin{document}/{=;q}' data.textबहुत छोटा ...
कोस्टा

@ कोस्टास जी, आप सही कह रहे हैं! मैंने आज बहुत बुरा सोचने में दिन बिता दिया है। अब खुले अंतराल के लिए यहाँ सोचने की बात है: unix.stackexchange.com/q/229060/16920 क्या आप }/{=;q}इसे उत्तर / टिप्पणी में समझा सकते हैं , कृपया?
लेओ लेपोल्ड हर्ट्ज '11

जवाबों:


37

मैं 2आपके कोड से प्राप्त कर रहा हूं । फिर भी, आप किसी भी चर या संख्या के लिए एक ही तकनीक का उपयोग कर सकते हैं:

local start=1
(( start++ ))

या

(( ++start ))

या

(( start += 1 ))

या

(( start = start + 1 ))

या केवल

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

आदि।


यह भी मदद कर सकता है: askubuntu.com/questions/385528/…
ब्रूनो बीरी

3

प्रयत्न:

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

$(( ))बैश बताता है यह एक अंकगणित कार्रवाई करने के लिए है, जबकि बैकटिक बैश बताता है, जिसमें अभिव्यक्ति का मूल्यांकन यह एक उपयोगकर्ता परिभाषित समारोह या एक बाहरी कार्यक्रम के लिए एक कॉल हो, और stdout की सामग्री को वापस जाने के लिए है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.