जहाँ तक मुझे पता है, [[
का एक बढ़ाया संस्करण है [
, लेकिन जब मैं [[
एक कीवर्ड के रूप में देखता हूं और [
एक बिल्डिन के रूप में दिखाया जा रहा हूं तो मैं उलझन में हूं ।
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
टीएलडीपी का कहना है
एक बिलिन उसी नाम के सिस्टम कमांड का एक पर्याय हो सकता है, लेकिन बैश आंतरिक रूप से इसे पुन: लागू करता है। उदाहरण के लिए, बैश इको कमांड / बिन / गूंज के समान नहीं है, हालांकि उनका व्यवहार लगभग समान है।
तथा
एक कीवर्ड एक आरक्षित शब्द है, टोकन या ऑपरेटर। कीवर्ड का शेल के लिए एक विशेष अर्थ है, और वास्तव में शेल के सिंटैक्स के बिल्डिंग ब्लॉक हैं। उदाहरण के लिए, के लिए, जबकि, करते हैं, और! कीवर्ड हैं। बिलिन के समान, एक कीवर्ड बैश में हार्ड-कोडित है, लेकिन एक बिलिन के विपरीत, एक कीवर्ड अपने आप में एक कमांड नहीं है, लेकिन एक कमांड निर्माण का एक सबयूनिट है। [2]
क्या यह दोनों [
और [[
एक खोजशब्द नहीं बनाना चाहिए ? क्या ऐसा कुछ है जो मुझे यहां याद आ रहा है? इसके अलावा, इस लिंक फिर से पुष्टि है कि दोनों [
और [[
एक ही तरह से संबंधित होना चाहिए।
if "[" $x -eq 3 ]
रूप में : अपेक्षित के रूप में काम करता है (क्योंकि बैश नामक कमांड के लिए दिखता है [
, और यह मौजूद है), लेकिन if "[[" $x -eq 3 ]]
काम नहीं करता है (क्योंकि एक बार फिर बैश उपयुक्त नाम की कमान खोजता है, लेकिन कोई भी नहीं है [[
आदेश)।
/usr/bin/echo
, लेकिन इसका मतलब यह नहीं है कि यह एक बिलिन नहीं है ।