यह बैश की तरह लगता है, और डैश भी, मेरी स्क्रिप्ट से किसी भी ASCII एनयूएल को फ़िल्टर करें।मेरी एनक्रिप्ट से सभी एनयूएल क्यों हटाए गए हैं?
$ printf 'test="\000a" ; echo ${#test}' | sh
1
$ printf 'test="\001a" ; echo ${#test}' | sh
2
$ printf 'ec\000ho test' | sh
test
$ # (Same for bash)
जबकि मैं मानता हूँ कि NUL का उपयोग कर एक बुरा बुरा विचार है (उदाहरण के तर्क कार्यक्रमों के लिए पारित करने के लिए NUL-समाप्त तार के साथ काम करता है), मैं जहां इस व्यवहार the POSIX standard द्वारा मंजूर किया गया है नहीं दिख रहा।
यह व्यवहार तब भी खराब हो जाता है जब यह व्यवहार फ़ाइल की सिंटैक्टिकल शुद्धता पर निर्णय लेता है।
$ printf 'echo "\\\000"' | sh
sh: Syntax error: Unterminated quoted string
$ printf 'echo "\\\000"' | bash
bash: line 1: unexpected EOF while looking for matching `"'
bash: line 2: syntax error: unexpected end of file
$ printf 'echo "\\\134"' | sh
\
क्या अनिवार्य हिस्सा मैं याद आती है था, या NUL-हटाने केवल कैसे अनिर्दिष्ट व्यवहार से निपटने के लिए पर एक निर्णय है?
सभी sh कार्यान्वयन मैं सी स्ट्रिंग्स से परिचित हूं, जो - एनयूएल-समाप्त होने के कारण - उनकी प्रकृति द्वारा एनयूएल मूल्यों को पकड़ने में असमर्थ हैं। –
zsh इन सभी परीक्षण मामलों को अच्छी तरह से संभालता है। –
मैं यूनिक्स और लिनक्स से पूछने की कोशिश करता हूं, अगर @ चार्ल्सडफी का जवाब पर्याप्त नहीं है। – twmb