उपयोग करने के बीच की विकृति क्या है
echo -e "Hello\nWorld"
तथा
echo $"Hello\nWorld"
क्या वे दोनों उत्पादन नहीं करते हैं:
Hello
World
echo $'Hello\nWorld'
, जो कि बैश के नीचे दो लाइनों पर प्रिंट होगा।
उपयोग करने के बीच की विकृति क्या है
echo -e "Hello\nWorld"
तथा
echo $"Hello\nWorld"
क्या वे दोनों उत्पादन नहीं करते हैं:
Hello
World
echo $'Hello\nWorld'
, जो कि बैश के नीचे दो लाइनों पर प्रिंट होगा।
जवाबों:
echo -e
और echo $'...'
दोनों समान हैं कि वे निम्नलिखित एस्केप दृश्यों का समर्थन करते हैं:
\a alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH
the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
उनमें मतभेद हैं। उपरोक्त के अलावा, echo -e
समर्थन करता है:
\c suppress further output
\0nnn the eight-bit character whose value is the octal value nnn (zero to three octal digits)
इसके विपरीत, $'....'
समर्थन करता है:
\' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \cx a control-x character
निरीक्षण करें कि, दोनों के बीच, \c
एक्सटेंशन असंगत हैं:
$ echo -e 'start\n\cIstop'
start
$ echo $'start\n\cIstop'
start
stop
के लिए echo -e
ऊपर, \c
आगे उत्पादन को दबा, जिससे अनदेखी Istop
। इसके विपरीत, के लिए $'...'
, \cI
एक टैब के रूप में व्याख्या की जाती है।
$"..."
इसके विपरीत $'...'
, का कार्य $"..."
काफी भिन्न होता है। यह वर्तमान लोकेल के अनुसार अनुवादित होने वाले स्ट्रिंग का कारण होगा।
echo -e
विवादecho -e
सार्वभौमिक रूप से गोले द्वारा समर्थित नहीं है और कई -e
एक डिजाइन गलती के रूप में विकल्प का संबंध है। का निरीक्षण करें:
$ ls
-e -n
$ echo *
$ printf "%s\n" *
-e
-n
जैसा कि आप देख सकते हैं, अगर आप जो प्रिंट कर रहे हैं echo
वह डैश के साथ शुरू होता है, तो परिणाम अप्रत्याशित हो सकते हैं। जब तक आप सुनिश्चित नहीं होते कि आप जिस पहले स्ट्रिंग के साथ प्रिंट करेंगे echo
वह डैश से शुरू नहीं होती है, तो आप उपयोग करने से बेहतर हो सकते हैं printf
।
इन कारणों के लिए, POSIX मानक समाप्त होता है :
नए अनुप्रयोगों को इको के बजाय प्रिंटफ का उपयोग करने के लिए प्रोत्साहित किया जाता है।
चेत रमी, जिन्होंने bash
पिछले 22 वर्षों से बनाए रखा है , सहमत हैं :
[एन] ईडब्ल्यू कोड को प्रिंटफ का उपयोग करना चाहिए।
*
) से अप्रत्याशित विकल्पों की समस्या वास्तव में विशिष्ट नहीं है echo
। यह किसी भी कमांड के साथ होता है जो छोटे या लंबे विकल्प (पारंपरिक तरीके से लिखे गए) को पहचानता है और इसमेंls
फाइलनाम ऑपरेंड्स भी शामिल है । तर्क के बाद से स्थिति थोड़ी खराब echo
है (जैसा कि आपके स्रोत का उल्लेख है) echo
आमतौर पर --
विकल्पों के अंत को इंगित करने के लिए स्वीकार नहीं करता है , जबकि कोई भी आदेश लिख सकता है ls -- *l
। (और वास्तव में एक को आमतौर पर उस तरह से कमांड लिखने की ज़रूरत होती है, जब ग्लब्स का उपयोग करना शुरू होता है *
या -
विशेष रूप से लिपियों में।)
\n
एस्केप अनुक्रम है, तो वास्तव में यह बात अगर मैं का उपयोग नहीं करता है echo -e '...'
, echo $'...'
याecho $"..."
Hello\nWorld
। आपको-e
भागने वाले पात्रों की व्याख्या करने के लिए स्विच की आवश्यकता है ।