पर्यावरण चर पर आधारित सशर्त असाइनमेंट


11

बैश स्क्रिप्ट में, मैं एक स्थानीय वैरिएबल प्रदान कर रहा हूं, ताकि मान बाहरी, वैश्विक परिवेश चर ( $MYAPP_ENV) पर निर्भर हो ।

if [ "$MYAPP_ENV" == "PROD" ]
then
    SERVER_LOGIN=foobar123@prod.example.com
else
    SERVER_LOGIN=foobar987@test.example.com
fi

क्या उपरोक्त असाइनमेंट लिखने का कोई छोटा (अभी तक साफ) तरीका है? (संभवत: किसी प्रकार के सशर्त ऑपरेटर / इनलाइन का उपयोग कर रहे हों।)

जवाबों:


17

आप ऐसा करने के लिए किसी केस / स्विच का उपयोग भी कर सकते हैं bash:

case "$MYAPP_ENV" in
 PROD) SERVER_LOGIN="foobar123@prod.example.com" ;;
    *) SERVER_LOGIN="foobar987@test.example.com" ;;
esac

या यह विधि:

[ "$MYAPP_ENV" = PROD ] &&
   SERVER_LOGIN=foobar123@prod.example.com ||
   SERVER_LOGIN=foobar987@test.example.com

2
एक केस स्टेटमेंट सभी को एक पंक्ति में जाम करने की तुलना में अधिक पठनीय है (जो तबाही में समाप्त हो सकता है यदि दूसरा कमांड विफल हो सकता है, इस मामले में, यह ठीक है, लेकिन उस आदत में पड़ना महंगा हो सकता है)। इस तरह के मामलों से निपटने के दौरान यह सबसे अच्छा तरीका है।
क्रिस डाउन

@ जोनिक - कृपया किसी एक उत्तर को स्वीकार करें यदि वह आपकी आवश्यकताओं को पूरा करता है ताकि दूसरों को पता चले कि आपका मुद्दा हल हो गया है। धन्यवाद।
स्लम

मुझे लगता है कि मामला विवरण प्रस्तुत विकल्पों में से सबसे साफ है, भले ही यह वही नहीं है जो मैं देख रहा था। अरे ठीक है, बैश वाक्यविन्यास अजीब है, उस के आसपास नहीं मिल सकता है। :)
जोनीक

1
@ जोनिक - यही मेरी खोज भी रही है। मुझे विश्वास है कि मैंने विकल्पों की तलाश की है, मैं लंबे कार्यक्रमों के बजाय बहुत सारी लाइनें पसंद करता हूं, और यदि मेरे स्वाद के लिए भी / या तो बहुत अधिक क्रिया है।
स्लम

9

प्रयत्न:

[ condition ] && var=value_when_true || var=value_when_false

यदि आपका असाइनमेंट संख्यात्मक है, तो आप bashटर्नरी ऑपरेशन का उपयोग कर सकते हैं :

(( assign_condition ? value_when_true : value_when_false ))

1
पूर्व टर्नरी नहीं है। true && false || echo "if this was ternary, this wouldn't be executed"
क्रिस डाउन

@ सच - सच है, लेकिन यह अभी भी एक अच्छा व्यावहारिक जवाब है भले ही शब्दावली बिल्कुल सही नहीं है।
कैस

@CraigSanders शब्दावली मायने रखती है - मैं इसका इस्तेमाल अक्सर स्क्रिप्ट में भी करता हूँ जब दूसरा कमांड विफल हो सकता है।
क्रिस डाउन

@ क्रिसडाउन: संपादन को उत्तर बनाएं, क्या यह अब बेहतर है?
cuonglm

1
2.5 साल के लिए योग्य यह cuonglm के संपादन के लिए ले लिया!
इरुवर

4

आप &&और ||ऑपरेटरों का उपयोग कर सकते हैं

[ "$MYAPP_ENV" == "PROD" ] && SERVER_LOGIN=foobar123@prod.example.com || SERVER_LOGIN=foobar987@test.example.com
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.