2010-04-14 12 views
13

बैश स्क्रिप्ट में, निम्न स्निपेट के बीच क्या अंतर है?बश स्क्रिप्ट अगर बयान

1) का उपयोग करते हुए एक कोष्ठक:

if [ "$1" = VALUE ] ; then 
# code 
fi 

2) का उपयोग करते हुए डबल कोष्ठक:

if [[ "$1" = VALUE ]] ; then 
# code 
fi 
+0

[इसी तरह के सवाल] (http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces) –

उत्तर

8

[[]] निर्माण [] की अधिक बहुमुखी बैश संस्करण है। Ksh88 से अपनाया गया विस्तारित परीक्षण आदेश है।

[[...]] परीक्षण निर्माण का उपयोग [...] स्क्रिप्ट में कई तर्क त्रुटियों को रोक सकता है। उदाहरण के लिए, & &, || <, और> ऑपरेटर [[]] परीक्षण के भीतर काम करते हैं, [] निर्माण में त्रुटि देने के बावजूद।

More info on the Advanced Bash Scripting Guide

अपने स्निपेट में, कोई फर्क नहीं पड़ता क्योंकि आप किसी भी अतिरिक्त सुविधाओं का उपयोग नहीं कर रहे हैं।

1

[[ का उपयोग ब्रैकेट में अभिव्यक्ति पर सामान्य शब्दलेखन और पथनाम विस्तार को दबाता है। यह कई अतिरिक्त संचालन भी सक्षम करता है, जैसे पैटर्न मिलान

2

[ एक बैश बिल्टिन है, [[ एक कीवर्ड है। bash FAQ देखें। सावधान रहें: इंटरनेट पर अधिकांश बैश स्क्रिप्ट क्रैप हैं (रिक्त स्थान के साथ फ़ाइल नामों के साथ काम न करें, छिपा सुरक्षा छेद इत्यादि पेश करें), और बैश किसी के विचार से मास्टर के लिए और अधिक कठिन है। यदि आप बैश प्रोग्रामिंग करना चाहते हैं, तो आपको कम से कम bash guide और bash pitfalls का अध्ययन करना चाहिए।

0

बस में मामला पोर्टेबिलिटी की जरूरत है:

पोर्टेबिलिटी के लिए परीक्षण कर आप बॉर्न विरासत परियोजना के माध्यम से शैल प्राप्त कर सकते हैं या:

http://freshmeat.net/projects/bournesh

(Mac OS X पर, उदाहरण के लिए,/bin/sh कोई शुद्ध बोर्न शेल नहीं है।)

0

जो एक बाहरी कार्यक्रम भी है, जिसका अर्थ यह नहीं है कि यह एक अंतर्निहित नहीं है।

which [ 
/usr/bin/[ 

एकल वर्ग कोष्ठक आप के लिए -lt का उपयोग करना पड़ में उर्फ ​​< 'से कम' शेष जब तुम <

if [ 3 -lt 4 ] ; then echo yes ; fi 
yes 
if [ 3 < 4 ] ; then echo yes ; fi 
bash: 4: No such file or directory 
if [[ 3 < 4 ]] ; then echo yes ; fi 
yes 
if [[ 3 -lt 4 ]] ; then echo yes ; fi 
yes 

4 इस्तेमाल कर सकते हैं: ऐसा कोई फ़ाइल साधन है, यह एक से पढ़ने का प्रयास "4" नाम की फ़ाइल - stdin < को पुनर्निर्देशित करना> और stdout के लिए समान है।

संबंधित मुद्दे