क्या कोष्ठक के साथ "तब" स्थानापन्न करना संभव है?


10

मैंने पहली बार किसी Cभाषा में कोडिंग, और उपयोग करना सीखा

if ( code )
then 
code
fi

यह वास्तव में मेरे लिए मेरे कोड को पढ़ने के लिए कठिन बनाता है (क्यों नहीं पूछें)। क्या कोई विकल्प है then?

कुछ इस तरह:

if ( code ) {
 code
}
fi

नीचे दिए गए उत्तर मदद कर सकते हैं, लेकिन अगर मैं जोड़ सकता हूं, तो विभिन्न भाषाओं के वाक्य विन्यास का उपयोग करना बहुत अच्छा विचार है। यदि आप सॉफ़्टवेयर डेवलपमेंट, या डेप्स में रोजगार ढूंढना चाहते हैं या उस मामले के लिए एक sysadmin के रूप में, आपको कई अलग-अलग वाक्यविन्यासों को पहचानना और उनका उपयोग करना सीखना होगा। जितना संभव हो उतना लचीला होने से आप किसी भी नियोक्ता के लिए अधिक मूल्यवान होंगे।
ओल्डमिमर जू

जवाबों:


21

कोई विकल्प नहीं है, लेकिन आप दोनों का उपयोग कर सकते हैं यदि आपको वास्तव में ब्रेस की आवश्यकता है:

if true ; then {
    something
} fi

यह ब्लॉक के निकाय के रूप में एक अनावश्यक स्पष्ट रूप से लटके हुए कमांड समूह का उपयोग करता है then। ब्रेसिज़ के किसी भी कमांड को thenरन के समय केवल वर्तमान शेल में निष्पादित किया जाएगा , ठीक वैसे ही जैसे ब्रेसिज़ नहीं थे।

मैं वास्तव में सामान्य रूप से या कोड के लिए इस शैली की सिफारिश नहीं करूंगा कि किसी और को पढ़ने की आवश्यकता होगी, लेकिन यह आपको वह ब्रेसिज़ देता है जो आप चाहते हैं, और यदि आप एक संपादक का उपयोग कर रहे हैं जिसमें लटके हुए ब्लॉक की आवश्यकता होती है ऐसा कुछ।


यहाँ एक और है जो "अनुशंसित करने योग्य नहीं है" - ब्रेसिज़ गेलर: { if { [[ a == aa ]];};then { echo yes;};else { echo no;}; fi;}- मूल रूप से, जब आप bashपर्याप्त उपयोग करते हैं, तो मानक वाक्यविन्यास पर्याप्त रूप से परिचित हो जाता है, ताकि यह एक समस्या का अधिक न हो।
पीटर।

15

आप के लिए देख हो रहे हैं सी खोल ( csh, tcsh, आदि ...)। ज्ञात रहे कि प्रोग्रामिंग के लिए विशेषज्ञ इसके खिलाफ सलाह देते हैं

मुझे यकीन नहीं है कि जिस हिस्से को आप अनहेल्दी मानते हैं, वह तथ्य है कि thenनिम्नलिखित लाइन पर है? यदि हां, तो निम्नलिखित शैली का उपयोग करने पर विचार करें:

if condition; then
    stuff
fi

मैं पीछे की ओर की तरह है कि वर्तनी बयान नाम स्वीकार करना होगा fiके लिए ifऔर esacके लिए case(लेकिन नहीं elihwके लिए whileविचित्र की तरह है!)। लेकिन यह मानक बॉर्न शेल है, सबसे पोर्टेबल शेल सिंटैक्स जिसका आप उपयोग कर सकते हैं।


आपके उत्तर के लिए धन्यवाद - मुझे thenअनफेयरिंग नहीं मिली , यह सिर्फ इतना है कि मेरा संपादक इसी {}जोड़े को हाइलाइट करेगा , और यह तब उपयोगी होगा जब मेरे पास किसी प्रकार की त्रुटि हो क्योंकि तब मैं आसानी से अपने सभी ifबयान देख सकता हूं और देख सकता हूं कि क्या कुछ गलत हुआ है ।
智障 智障

1
आह येस। कि प्लस viके %आदेश जो मिलान ब्रेस / कोष्ठक / ब्रैकेट के लिए कूदता है। मुझे सहानुभूति है। मैं याद आती है viकी %जब अजगर में प्रोग्रामिंग आदेश।
सेलडा

8
क्या आपने माचिस विम प्लगइन की कोशिश की है? यह बैश में / फाई के लिए% जंप का समर्थन करता है और कई अन्य भाषाओं में बहुत सारे ब्लॉक करता है। यहां देखें - vim.org/scripts/script.php?script_id=39
amisax

@AmitKumar टिप के लिए धन्यवाद। मैं एक बार नजर डालूँगा!
सेलडा

9

शायद यह आँखों पर आसान है:

[ condition ] && {
   # statement 1
   # statment 2
   # ...
}

उसके अलावा, बस इसकी आदत हो जाती है। भाषा के मुहावरों का प्रयोग करें।


1
लेकिन आमतौर पर बेवजह की मार झेलनी पड़ती है और कोष्ठक के एक सेट का उपयोग करें।
जोसिफ रोडिन

5

निम्नलिखित वहाँ के पास है। और अजीब है।

: if; { code; } && {
    code
}

मुझे व्यक्तिगत रूप से कभी पसंद नहीं आया ...

if true; then
more;fi

... खुद बनो। मुझे पसंद है जब नियंत्रण शब्द का नेतृत्व करते हैं । यह मुझे हमेशा अजीब लगता था कि प्रचलित ...;thenरूप बिल्कुल आया।

if    this && that
then  do these things too
else  i will probably get upset
fi

यह आपके अनुरोध के लगभग पूरी तरह से विपरीत है, लेकिन इसे करने का एक और तरीका है। आप आवश्यकतानुसार किसी भी पुनर्निर्देशित fiलाइन पर भी सौदा कर सकते हैं और वे पूरे ब्लॉक पर लागू होंगे।


यह प्रचलित रूप आम का एक और अवतार प्रतीत होता है if(...) {, यानी ifसी-लाइक लैंग्वेज के समान ही ब्रेस को खोलना ।
रुस्लान

@Ruslan - शायद - लेकिन लाइन वास्तव में सी में कोई फर्क नहीं पड़ता, क्या यह करता है?
मिकसर्व

सही है, लेकिन न तो लाइन ब्रेक शेल में अंतर करता है, क्या यह करता है? स्थिति के बाद अर्धविराम पहले से ही ifकमांड की निरंतरता की व्याख्या करता है , भले ही अगली पंक्ति पर हो।
रुस्लान

@Ruslan - हाँ - आपको ;उस मामले में परिसीमन का उपयोग करना होगा। इसलिए वे करते हैं।
मिकसेर्व

:इस तरह से शेल शेल का उपयोग करना , बस कोड की एक पंक्ति बाइट-वार सी सिंटैक्स के करीब हो सकती है, इसे किसी भी तरह से प्रोत्साहित नहीं किया जाना चाहिए।
जोसिफ रोडिन

0

यहाँ एक तरीका है:

[ "$var" = "find" ] && echo "found"

के बराबर है:

if [ "$var" = "find" ]; then
  echo "found"
fi

जैसा कि वह सवाल में कहता है, वह कोष्ठक चाहता है{...}चारों ओर कुछ रखो echo "found", और फिर आप सही दिशा में जा रहे होंगे।
पीटर।

-2

मैं हमेशा उपयोग करता हूं:

if (code); then
   code;
fi

संभवत: बिल्कुल वैसा नहीं जैसा आप चाहते हैं, लेकिन यह थोड़ा और अधिक पसंद है।


2
यह एक सबशेल, कम प्रदर्शन का कारण बनता है।
विल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.