bash - बैश में टर्नरी ऑपरेटर(?:)




syntax conditional-operator (9)

कोड:

a=$([ "$b" == 5 ] && echo "$c" || echo "$d")

इस तरह कुछ करने का कोई तरीका है

int a = (b == 5) ? c : d;

बैश का उपयोग कर?


टर्नरी ऑपरेटर ? : ? : if/else का छोटा रूप if/else

case "$b" in
 5) a=$c ;;
 *) a=$d ;;
esac

या

 [[ $b = 5 ]] && a="$c" || a="$d"

यदि आप समान वाक्यविन्यास चाहते हैं तो आप इसका उपयोग कर सकते हैं

a=$(( $((b==5)) ? c : d ))

यदि स्थिति केवल एक चर सेट होने पर जांच कर रही है, तो यहां तक ​​कि एक छोटा सा रूप भी है:

a=${VAR:-20}

यदि VAR सेट किया गया है तो VAR के मान को असाइन करेगा, अन्यथा यह इसे डिफ़ॉल्ट मान 20 असाइन करेगा - यह अभिव्यक्ति का परिणाम भी हो सकता है।

जैसा कि टिप्पणी में एलेक्स नोट करता है, इस दृष्टिकोण को तकनीकी रूप से "पैरामीटर विस्तार" कहा जाता है।


यहां कुछ विकल्प दिए गए हैं:

1- यदि एक पंक्ति में और फिर उपयोग करें, तो यह संभव है।

if [[ "$2" == "raiz" ]] || [[ "$2" == '.' ]]; then pasta=''; else pasta="$2"; fi

2- इस तरह एक समारोह लिखें:

 # Once upon a time, there was an 'iif' function in MS VB ...

function iif(){
  # Echoes $2 if 1,banana,true,etc and $3 if false,null,0,''
  case $1 in ''|false|FALSE|null|NULL|0) echo $3;;*) echo $2;;esac
}

इस तरह लिपि के अंदर उपयोग करें

result=`iif "$expr" 'yes' 'no'`

# or even interpolating:
result=`iif "$expr" "positive" "negative, because $1 is not true"` 

3- मामले के जवाब में प्रेरित, एक अधिक लचीला और एक लाइन का उपयोग है:

 case "$expr" in ''|false|FALSE|null|NULL|0) echo "no...$expr";;*) echo "yep $expr";;esac

 # Expression can be something like:     
   expr=`expr "$var1" '>' "$var2"`

हम टर्नरी ऑपरेटर के लिए शैल स्क्रिप्टिंग में निम्नलिखित तीन तरीकों का उपयोग कर सकते हैं:

    [ $numVar == numVal ] && resVar="Yop" || resVar="Nop"

Or

    resVar=$([ $numVar == numVal ] && echo "Yop" || echo "Nop")

Or

    (( numVar == numVal ? (resVar=1) : (resVar=0) ))

(( a = b==5 ? c : d )) # string + numeric

(ping -c1 localhost&>/dev/null) && { echo "true"; } || {  echo "false"; }

if [ "$b" -eq 5 ]; then a="$c"; else a="$d"; fi

cond && op1 || op2 अन्य उत्तरों में सुझाए गए cond && op1 || op2 अभिव्यक्ति में एक अंतर्निहित बग है: यदि op2 nonzero निकास स्थिति है, तो op2 चुपचाप परिणाम बन जाता है; त्रुटि भी मोड में नहीं पकड़ा जाएगा। इसलिए, यह अभिव्यक्ति केवल उपयोग करने के लिए सुरक्षित है यदि op1 कभी विफल नहीं हो सकता है ( : , यदि कोई अंतर्निहित, वर्चुअल और ओएस कॉल) जैसे किसी भी ऑपरेशन के बिना एक अंतर्निहित, परिवर्तनीय असाइनमेंट true है)।

उद्धरण नोट करें। पहली जोड़ी $b वाक्य खाली है या व्हाइटस्पेस है, तो पहली जोड़ी एक वाक्यविन्यास त्रुटि को रोक देगा। अन्य सभी सफेद जगहों के अनुवाद को एकल रिक्त स्थान में रोक देंगे।





conditional-operator