Default/Fallback Argument को Handle करना
In this page:
${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 :-
#!/bin/bash
set --
name=${1:-"anonymous"}
echo "Hello, $name"
Login to try C/C++/Java/PHP code in the editor
:= से Default वापस Assign करना
${var:=default} :- जैसा behave करता है पर default को var में भी assign करता है, इसलिए var के subsequent uses भी default देखते हैं। यह सिर्फ ordinary variables पर काम करता है, $1 जैसे positional parameters पर नहीं।
: (एक no-op command) एक common trick है := को इसके side effect के लिए apply करने का बिना इसकी expanded value कहीं उपयोग करने की ज़रूरत के।उदाहरण: Assigning the Default Back with :=
#!/bin/bash
unset timeout
: "${timeout:=30}"
echo "timeout is now set to: $timeout"
Login to try C/C++/Java/PHP code in the editor
:+ के साथ Inverse Case
${var:+alt} :- का mirror image है: यह alt तक expand होता है सिर्फ तब जब var set और non-empty हो, और अन्यथा कुछ नहीं, जो एक variable मौजूद होने पर ही एक flag conditionally include करने के लिए उपयोगी है।
उदाहरण: The Inverse Case with :+
#!/bin/bash
verbose="1"
flag=${verbose:+"--verbose"}
echo "flag is: $flag"
unset verbose
flag=${verbose:+"--verbose"}
echo "flag is now: [${flag}]"
Login to try C/C++/Java/PHP code in the editor
Defaults को Validation के साथ Combine करना
Defaults और required-value checks combine किए जा सकते हैं: optional settings को :- से एक fallback दें, जबकि अभी भी उन values के लिए :? उपयोग करें जो caller द्वारा truly provide की जानी चाहिए।
उदाहरण: Combining Defaults with Validation
#!/bin/bash
set -- "myapp"
app_name=${1:?app name is required}
log_level=${2:-"info"}
echo "starting $app_name with log level $log_level"
Login to try C/C++/Java/PHP code in the editor
${var:-default}(unset OR empty होने पर default उपयोग करें) को${var-default}(सिर्फ unset होने पर default उपयोग करें, empty string as-is रखी जाती है) के साथ confuse करना।${var:=default}उपयोग करना यह उम्मीद करते हुए कि यह positional parameters पर directly काम करेगा; assignment forms$1,$2, आदि को assign नहीं कर सकते, सिर्फ named variables को।- यह भूल जाना कि
${var:+alt}inverse case है: यहaltsubstitute करता है सिर्फ तब जबvarset और non-empty हो, जो:-के साथ confuse करना easy है।
${var:-default}defaultदेता है अगरvarunset या empty हो,varको खुद बदले बिना।${var:=default}वही करता है परdefaultको वापसvarमें भी assign करता है (सिर्फ plain variables पर काम करता है, positional parameters पर नहीं)।${var:+alt}altदेता है सिर्फ तब जबvarset और non-empty हो; अन्यथा कुछ नहीं देता।${var:?message}तुरंतmessageके साथ error करता है अगरvarunset या empty हो।
Chapter Quiz — Complete all 7 topics to unlock
0/7 topics done
Complete these topics first:
- getopts for Parsing Command-Line Flags
- Positional Parameters and shift
- Process Substitution in Practice (diff <(...) <(...))
- Arrays of Arguments ("$@" vs "$*" Quoting Difference)
- Nameref Variables (declare -n) for Passing Arrays by Reference
- Heredoc Templating (Generating a Config File from Variables)
- Default/Fallback Argument Handling