← Back to Bash Course | Chapter 13: Advanced Scripting | Lesson 7 of 7

Default/Fallback Argument को Handle करना

एक script अपने आप एक sensible default value supply कर सकती है जब इसे run करने वाला व्यक्ति एक न दे, fail होने या एक blank छोड़ने के बजाय।
Syntax
bash
${1:-default}
${variable:=default}
${variable:+alternative}

:- से एक Fallback देना

${var:-default} var की value तक expand होता है अगर यह set और non-empty हो, या अन्यथा default तक, var को खुद modify किए बिना। यह एक argument को sensible default देने का सबसे common तरीका है।

उदाहरण: Providing a Fallback with :-

bash
#!/bin/bash
set --
name=${1:-"anonymous"}
echo "Hello, $name"

:= से Default वापस Assign करना

${var:=default} :- जैसा behave करता है पर default को var में भी assign करता है, इसलिए var के subsequent uses भी default देखते हैं। यह सिर्फ ordinary variables पर काम करता है, $1 जैसे positional parameters पर नहीं।

Note: Leading : (एक no-op command) एक common trick है := को इसके side effect के लिए apply करने का बिना इसकी expanded value कहीं उपयोग करने की ज़रूरत के।

उदाहरण: Assigning the Default Back with :=

bash
#!/bin/bash
unset timeout
: "${timeout:=30}"
echo "timeout is now set to: $timeout"

:+ के साथ Inverse Case

${var:+alt} :- का mirror image है: यह alt तक expand होता है सिर्फ तब जब var set और non-empty हो, और अन्यथा कुछ नहीं, जो एक variable मौजूद होने पर ही एक flag conditionally include करने के लिए उपयोगी है।

उदाहरण: The Inverse Case with :+

bash
#!/bin/bash
verbose="1"
flag=${verbose:+"--verbose"}
echo "flag is: $flag"

unset verbose
flag=${verbose:+"--verbose"}
echo "flag is now: [${flag}]"

Defaults को Validation के साथ Combine करना

Defaults और required-value checks combine किए जा सकते हैं: optional settings को :- से एक fallback दें, जबकि अभी भी उन values के लिए :? उपयोग करें जो caller द्वारा truly provide की जानी चाहिए।

उदाहरण: Combining Defaults with Validation

bash
#!/bin/bash
set -- "myapp"
app_name=${1:?app name is required}
log_level=${2:-"info"}
echo "starting $app_name with log level $log_level"
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. ${var:-default} (unset OR empty होने पर default उपयोग करें) को ${var-default} (सिर्फ unset होने पर default उपयोग करें, empty string as-is रखी जाती है) के साथ confuse करना।
  2. ${var:=default} उपयोग करना यह उम्मीद करते हुए कि यह positional parameters पर directly काम करेगा; assignment forms $1, $2, आदि को assign नहीं कर सकते, सिर्फ named variables को।
  3. यह भूल जाना कि ${var:+alt} inverse case है: यह alt substitute करता है सिर्फ तब जब var set और non-empty हो, जो :- के साथ confuse करना easy है।
चैप्टर सारांश
  • ${var:-default} default देता है अगर var unset या empty हो, var को खुद बदले बिना।
  • ${var:=default} वही करता है पर default को वापस var में भी assign करता है (सिर्फ plain variables पर काम करता है, positional parameters पर नहीं)।
  • ${var:+alt} alt देता है सिर्फ तब जब var set और non-empty हो; अन्यथा कुछ नहीं देता।
  • ${var:?message} तुरंत message के साथ error करता है अगर var unset या empty हो।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.