प्रिंटफ में डैश


37

मैं प्रिंट स्क्रिप्ट का उपयोग करने की कोशिश कर रहा हूँ एक bash स्क्रिप्ट में कुछ सुंदर आउटपुट

उदाहरण के लिए:
-----------------------
| This is some output |
-----------------------

लेकिन मैं कुछ ऐसे व्यवहार पर लड़खड़ा गया हूँ जो मुझे समझ नहीं आ रहा है।

$ printf "--" मुझे त्रुटि देता है printf: usage: printf [-v var] format [arguments]

और में $ printf "-stuff"परिणाम-bash: printf: -s: invalid option

तो जाहिरा तौर पर प्रिंटफ सोचता है कि मैं कुछ तर्क पारित करने की कोशिश कर रहा हूं, जबकि मैं नहीं हूं।

इस बीच, पूरी तरह से दुर्घटना से, मुझे यह हल मिल गया है:
$ printf -- "--- this works now ----\n"मुझे देता है--- this works now ----

क्या कोई इस व्यवहार की व्याख्या कर सकता है?


1
यह भी देखें unix.stackexchange.com/questions/11376/…
manatwork

इंटरसेट से, क्या ऐसा करने पर कोई क्रियान्वयन echoविफल होगा echo ------------? अधिकांश केवल समर्थन -n(कोई अनुगामी न्यूलाइन नहीं), -e(बैकस्लैश-एस्कैप्ड चार्ट्स की व्याख्या) और संभव -E(उन्हें व्याख्या न करें) और अन्य विकल्प-जैसे तर्कों का सामना करने पर त्रुटि नहीं करते हैं, है ना? (संपादित करें: जीएनयू है /bin/echoभी समर्थन करता है --helpऔर --version।)
janmoesen

जवाबों:


44

--कार्यक्रम इस प्रकार है कि जो कुछ भी चाहिए बताने के लिए प्रयोग किया जाता है नहीं एक कमांड लाइन के रूप में व्याख्या की जा विकल्प के लिए printf

संपादित करें: इस प्रकार printf "--"आपने मूल रूप से "बिना किसी तर्क के प्रिंटफ" के रूप में समाप्त होने की कोशिश की और इसलिए असफल रहे।


18
दूसरे शब्दों में, मुद्रित करने के लिए --आप चला सकते हैं printf -- --
l0b0

2
... और printf --जैसा है printf(आपको वैसा ही संदेश मिलता है)
पीटर.ऑक्टो

ध्यान दें कि printf -- $fmtपोर्टेबल नहीं है। व्यस्तबॉक्स 1.30.1 पर, printf -- '%s\n' helloपैदावार --। इन्हें भी देखें: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html
केल्विन

25

-- एक विकल्प के रूप में व्याख्या की जा रही है (इस मामले में, यह इंगित करने के लिए कि अधिक विकल्प नहीं हैं)।

खराब व्याख्या को रोकने के लिए उपयोग करते समय एक प्रारूप स्ट्रिंग को हमेशा शामिल किया जाना चाहिए printf। आपके विशेष मामले के लिए:

printf '%s\n' '-----------------------'

जब आप इसे एक अनुक्रम के साथ करने की आवश्यकता है तो क्या होगा? printf '-%.0s' {1..54}
कोडीनिजा

2
@qodeninja तब आप वास्तव में :-) का उपयोग करना चाहते हैं--printf -- '-%.0s' {1..54}
क्रिस डाउन

4

प्रिंटफ बिलिन और / यूएसआर / बिन / प्रिंटफ के बीच अंतर हैं, दूसरा इन कष्टप्रद त्रुटियों के बिना "आपका क्या मतलब है"।

printf "-----"             # error
printf -- "-----"          # ok
/usr/bin/printf "-----"    # ok
/usr/bin/printf -- "-----" # ok
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.