मैं डिफ़ॉल्ट शेलबैक के साथ मछली शेल में एक चर का संदर्भ कैसे दे सकता हूं


16

क्या है मछली खोल निम्नलिखित बैश के बराबर:

echo ${TEST:-1}

बैश में यह TEST का मान प्रिंट करेगा यदि एक था, या 1 अगर नहीं था।


कुछ अनुरक्षकों के स्पष्टीकरण के लिए github.com/fish-shell/fish-shell/issues/… भी देखें ।
webwurst

जवाबों:


10

मेरा मानना ​​है कि आपको टेम्परेरी वैरिएबल (या फंक्शन) की जरूरत है। यदि $TESTमौजूद नहीं है, तो इसका विस्तार कुछ भी नहीं है, और $test_orकेवल इसमें शामिल है 1। ऐसा करने का वास्तविक तरीका अच्छा होगा, लेकिन वर्तमान में वाक्यविन्यास मुद्दा है, और ऐसा नहीं लगता कि यह वास्तव में अधिकांश उद्देश्यों के लिए आवश्यक है।

set test_or $TEST 1
echo $test_or[1]

इसके अलावा, यदि आप चाहते हैं कि $TESTअगर यह पहले से मौजूद नहीं है, तो आप संशोधित कर सकते हैं set -q

set -q TEST; or set TEST 1
echo $TEST

6

एक चर का संदर्भ देने और एक डिफ़ॉल्ट मान प्रदान करने के लिए आप एक सशर्त युक्त कमांड प्रतिस्थापन का उपयोग कर सकते हैं जो echoदोनों शाखाओं पर करता है ।

> echo (if set -q someVar; echo $someVar; else; echo 'a default value'; end)
a default value
> set someVar 42
> echo (if set -q someVar; echo $someVar; else; echo 'a default value'; end)
42

चूंकि यह एक प्रकार की क्रिया है, इसलिए आप भिन्न होने पर एक अलग लाइन पर वैरिएबल को इनिशियलाइज़ कर सकते हैं।

> echo $otherVar

> set -q otherVar; or set otherVar 'a default value'
> echo $otherVar
a default value

यदि आप वास्तव में डिफ़ॉल्ट इन-लाइन को स्थानापन्न करने की क्षमता चाहते हैं, तो आप इसे अप्रत्यक्ष रूप से उपयोग करके किसी फ़ंक्शन में कर सकते हैं, और फिर उस फ़ंक्शन को कॉल कर सकते हैं।

> function orDefault
      set -q $argv[1]; and echo $$argv[1]; or echo $argv[2]
  end
>
> echo $moreVar

> echo (orDefault moreVar 'a default value')
a default value
> set moreVar 42
> echo (orDefault moreVar 'a default value')
42
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.