मैं अपनी कमांड लाइनों में अन्य चर मापदंडों के लिए शेल चर कैसे प्राप्त कर सकता हूं?


16

मैं अपनी कमांड लाइनों में अन्य चर मापदंडों के लिए शेल चर कैसे प्राप्त कर सकता हूं?

उदाहरण के लिए,

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql

मुझे सहमति .sqlदेने की जरूरत है$WEBSITE

जवाबों:


26

${ }किसी वैरिएबल को संलग्न करने के लिए उपयोग करें ।

घुंघराले कोष्ठक के बिना:

VAR="foo"
echo $VAR
echo $VARbar

देना होगा

foo

और कुछ भी नहीं है, क्योंकि चर $VARbarमौजूद नहीं है।

घुंघराले कोष्ठक के साथ:

VAR="foo"
echo ${VAR}
echo ${VAR}bar

देना होगा

foo
foobar

पहले संलग्न करना $VARआवश्यक नहीं है, लेकिन एक अच्छा अभ्यास है।

अपने उदाहरण के लिए:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql

के लिए यह काम करता है bash, zsh, ksh, हो सकता है दूसरों के भी।


3
यह सभी बॉर्न-शैली के गोले (बॉर्न, पोसिक्स, बैश, क्श, ज़श), सी-स्टाइल के गोले (csh, tsh), और यहां तक ​​कि मछली के बिना ब्रेसिज़ के लिए भी काम करता है। तो यह वास्तव में यूनिक्स गोले के बीच सार्वभौमिक है। मैं ब्रेसिज़ को अच्छा अभ्यास नहीं कहूंगा। लेकिन मैं अच्छी तरह से चर प्रतिस्थापन के आसपास दोहरे उद्धरण चिह्नों का उपयोग करके कॉल करता हूं।
गिल्स एसओ- बुराई को रोकना '

1
@ गाइल्स, मैं आगे जाऊंगा और कहूंगा कि डबल वेरिएबल के आसपास दोहरे उद्धरण चिह्नों का उपयोग करने से बहुत बुरा व्यवहार होता है।
स्टीफन चेज़लस

इसके अलावा, इस बात का ध्यान रखें कि ${ }किसी भी मायने में समवर्ती नहीं है। उदाहरण के लिए, ELP=elp && echo $ELP && man --h${EPL}काम नहीं करता है।
फोकी

4

बस चर सामग्री को जो कुछ भी आप चाहते हैं, उसे समाप्‍त करें, जैसे

/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"

दोहरे उद्धरण सम्‍मिलित करने के लिए असंबंधित हैं: यहाँ >$WEBSITE.sqlभी काम किया होगा। जब चर का मूल्य कुछ शेल विशेष वर्ण (व्हाट्सएप और \[?*) हो सकता है, तो उन्हें चर विस्तार के आसपास की आवश्यकता होती है । मैं दृढ़ता से सभी चर विस्तार और कमांड प्रतिस्थापन के आसपास दोहरे उद्धरण लगाने की सलाह देता हूं, अर्थात, हमेशा लिखें "$WEBSITE"और "$(mycommand)"

अधिक जानकारी के लिए, $ VAR बनाम $ {VAR} देखें और उद्धृत करने के लिए या नहीं


2

मैं आमतौर पर उद्धरण का उपयोग करता हूं, जैसे echo "$WEBSITE.sql"

तो आप इसे लिख सकते हैं:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"

3
यह काम करता है क्योंकि .एक चर नाम में एक वैध चरित्र नहीं है; देख हिलाना का जवाब अगर आप एक स्ट्रिंग मान्य वर्ण के साथ शुरू होता है कि श्रेणीबद्ध करना चाहते हैं (उदाहरण के लिए "$ WEBSITEsql" होगा काम नहीं)
माइकल Mrozek
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.