नए ;&
और ;;&
ऑपरेटरों को
4.0 में पेश कियाBash
गया था
और हालांकि वे दोनों समान परिस्थितियों में उपयोगी हो सकते हैं, मुझे लगता है कि वे आपके मामले में किसी काम के नहीं हैं। यह man bash
इन ऑपरेटरों के बारे में क्या कहता है:
यदि ;; ऑपरेटर का उपयोग किया जाता है, पहले पैटर्न के मैच के बाद किसी भी बाद के मैचों का प्रयास नहीं किया जाता है। का उपयोग कर; & के स्थान पर ;; पैटर्न के अगले सेट से जुड़ी सूची को जारी रखने के लिए निष्पादन का कारण बनता है। का उपयोग ;; & के स्थान पर ;; शेल के बयान में अगले पैटर्न सूची का परीक्षण करने का कारण बनता है, यदि कोई हो, और एक सफल मैच पर किसी भी संबंधित सूची को निष्पादित करता है।
दूसरे शब्दों में, ;&
के माध्यम से गिरावट है और जैसा कि हम इसे से पता C
और
;;&
बनाता है bash
शेष मामलों के बजाय से लौटने की जांच
case
पूरी तरह से ब्लॉक। आप ;;&
यहां कार्रवाई का एक अच्छा उदाहरण पा सकते हैं : /programming//a/24544780/3691891 ।
ऐसा कहा जा रहा है, न तो आपकी स्क्रिप्ट में इस्तेमाल किया जा सकता है ;&
और न ही ;;&
क्योंकि दोनों ही उस पर चले *)
जाएंगे।
निम्नलिखित स्क्रिप्ट काम करती है और वह करती है जो आप तर्क को फिर से व्यवस्थित किए बिना चाहते हैं लेकिन इसे केवल एक उदाहरण के रूप में मानते हैं और कभी भी इस पर भरोसा नहीं करते हैं, यह बहुत नाजुक है। मैंने यहाँ से विचार लिया
है :
#!/usr/bin/env bash
function jumpto
{
label=$1
cmd=$(sed -n "/$label:/{:a;n;p;ba};" "$0" | grep -v ':$')
cmd=$(echo "$cmd" | sed 's,;;,,')
cmd=$(echo "$cmd" | sed 's,esac,,')
eval "$cmd"
}
input="foo"
VAR="1"
case $input in
foo)
if [ $VAR = "1" ]; then
printf "perform fallthrough\n"
jumpto ft
else
printf "do not perform fallthrough\n"
fi
;;
*)
ft:
echo "fallthrough worked!"
;;
esac
if [ $VAR -eq 1 ]; then
जो कुछ भी है उसमें कोड के हिस्से से कूदने की कोशिश कर रहे हैं*)
? क्योंकि यह किस तरह से परती अवस्था से अलग है, इस प्रकार आपके प्रश्न को थोड़ा भ्रामक बना देता है।