किसी स्क्रिप्ट में एक तर्क के मूल्य को कैसे बदला जाए?


11

मैंने निम्नलिखित छोटी सरल स्क्रिप्ट की कोशिश की:

#!/bin/bash
$1="bar"
echo $1

लेकिन जब मैं दौड़ता ./script fooहूं तो मुझे त्रुटि मिलती है और मान नहीं बदला जाता है:

/home/mika/script: line 2: foo=bar: command not found
foo

मुझे पता है कि $ 1 पहला तर्क है जो आप अपनी स्क्रिप्ट में पास करते हैं। लेकिन इस तरह भी मैं इसका मूल्य बदलना चाहता हूं।


जवाबों:


10

आप बिलिन का उपयोग कर सकते हैं set:

#!/bin/bash
set -- "bar"
echo $1

स्रोत और इसके बारे में: कमांड लाइन तर्क बदलें - बैश


मैंने कोशिश की, लेकिन यह अभी भी "फू" गूँज रहा था। क्या आपको अलग परिणाम मिले? स्क्रिप्ट के लिए "फू" पास करना सुनिश्चित करें।
मार्टी फ्राइड

@MartyFried Ups, क्षमा करें ... मैं सिर्फ अपने उत्तर को अपडेट करता हूं।
रादु रयाडेनु 19

यह काम करता है। :-) अच्छा जवाब ... मुझे लगता है कि मैं यह मान रहा था कि वह ऐसा नहीं करना चाहता था, और मुझे यकीन नहीं है कि वह ऐसा क्यों करेगा, लेकिन आपका जवाब वास्तव में मेरे सुझाव से कहीं अधिक सही है कि आप इसे न करें। लिंक के लिए धन्यवाद।
मार्टी फ्राइड

4

आप उन चरों को सीधे नहीं बदल सकते। तुम कह सकते हो:

x=$1
echo $x

फिर आप $xइसके बजाय उपयोग कर सकते हैं

का उपयोग $1=barकरना तुरंत पहले पैरामीटर के लिए स्थानापन्न करेगा $1, और आप अनिवार्य रूप से कह रहे हैं "foo=bar", और यह एक कमांड के रूप में व्याख्या की जाती है "फू", न कि एक चर "फू";


अच्छा विचार है, लेकिन निर्भर करता है कि क्या ओपी पूरा करना चाहता है ... +1 मुझसे।
रादु राईडेनु 19

2

इसके $1लिए, में bashऔर अन्य गोले का उपयोग न करें , $1यह पहला तर्क है जिसे आप अपनी स्क्रिप्ट में पास करते हैं:

#!/bin/bash
echo $1

यदि आप उपरोक्त को चलाते हैं foo.sh hello, तो यह hello1 तर्क होगा। इसके अलावा, आप एक चर के रूप में varऔर एक चर सामग्री के रूप में देखें $var। इसलिए, जिस व्यवहार की आप अपेक्षा कर रहे हैं, उसे प्राप्त करने के लिए, बस अपने चर के लिए किसी अन्य नाम का उपयोग करें और उपयोग न करें $:

#!/bin/bash
var="bar"
echo $var

यह छोटी सी स्क्रिप्ट लोगों को यह समझने के लिए एक उदाहरण थी कि मैं क्या चाहता हूं। मुझे पता है कि $ 1 पहला तर्क है जो आप अपनी स्क्रिप्ट में पास करते हैं। लेकिन, इस तरह भी मैं इसका मूल्य बदलना चाहता हूं। मुझे इसे एक और बड़ी स्क्रिप्ट में लागू करने की आवश्यकता है। धन्यवाद।
user258266

@ user258266 नहीं नए मूल्य के साथ बड़ी स्क्रिप्ट को कॉल करें, उन $1मानों के लिए उपयोग न करें जिन्हें आप बदलना चाहते हैं। वैसे भी, जब तक आप वाक्यविन्यास त्रुटि को ठीक करते हैं, तब तक काम करना चाहिए, आपको मुख्य समस्या यह थी कि आप इसका उपयोग कर रहे थे $
टेराडॉन

लेकिन मुझे जरूरत है ... मैं यहाँ नहीं समझा सकता ... शायद मैं अपने सवाल को संपादित करूँगा।
user258266

@ user258266 कृपया करें। आप के रूप में एक चर सेट करने की कोशिश कर रहे हैं $foo="bar", कि काम नहीं करता है, आप के foo="bar"बिना की जरूरत है $
टेराडन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.