Printf कमांड के साथ भ्रम?


13

मुझे इको कमांड का उपयोग किए बिना एक प्रिंट कमांड में निम्नलिखित तीन लाइनें प्रिंट करनी होंगी। इसलिए मैंने प्रिंटफ कमांड को चुना है। ये तीन लाइनें हैं:

  Different characters can be represented and supported 
  in the print command, for example: 
  x-y, X+Y, –, +, <, >, %, $, #, &.

मैंने अब तक क्या किया है:

   printf "
   Different characters can be represented and supported 
   in the print command, for example: 
   x-y, X+Y, –, +, <, >, %, $, #, &.
   "

लेकिन मुझे तीसरी पंक्ति ',' के लिए बैश एरर मिला।

तो क्या कोई मुझे प्रबुद्ध करेगा।


वैसे, printकमांड कमांड के बीच अंतर है printf
फ्लिम्ड

जवाबों:


12

उपयोग करने के लिए बेहतर:

printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"

आपको वह त्रुटि मिलती है, जैसा कि अन्य लोगों ने यहां कहा है, %चरित्र के कारण जो विशेष है और बचना चाहिए।

man 1 printfअधिक जानकारी के लिए देखें ।


@Narwen मैं आपको हर समय उस आदमी का उपयोग करने के लिए प्रेरित करता हूं जब आपको विशेष पात्रों के साथ खेलना होता है। आदमी में खोजने के लिए टाइप करें /your_string_to_searchऔर फिर एंटर दबाएं।
रादु राईडेनू

4
पूरा मुद्दा printfउस %चरित्र का है और वह क्या करता है!
कज़

14

%में एक विशेष चरित्र है printf। यही त्रुटि पैदा कर रहा है। आप के रूप में इसे से बचने की जरूरत है %%

$बाहरी शेल द्वारा दोहरे उद्धरण चिह्नों के भीतर भी प्रतिस्थापित किया जा सकता है, इसलिए आपको उस ( \$) से बचना चाहिए । आमतौर पर एकल उद्धरणों का उपयोग करना आसान होता है।


5
डॉलर का चिन्ह केवल तब विशेष होता है जब उसके बाद एक मान्य चर नाम होता है जो यहाँ नहीं है।
ग्लेन जैकमैन

1
$variableशेल द्वारा प्रतिस्थापित किया जाता है, द्वारा नहीं printf। यदि आप अपने को डबल कोट्स के बजाय सिंगल कोट्स के साथ घेरते हैं, $तो शेल द्वारा इंटरपोल नहीं किया जाएगा और सीधे पास हो जाएगा printf
फ्लिम्स

जब एक वैध चर नाम (या नहीं, कि चर वास्तव में परिभाषित किया गया है) के बाद विशेष होने के अलावा @glennjackman, $भी खास है जब के बाद{ या एक से विशेष पैरामीटर प्रतीक , या एक या अधिक संख्याएं । हालांकि आप जो कह रहे हैं उसका मूल विचार सही है।
एलियाह कगन

9

%printf के लिए विशेष है: यह प्रारूप विनिर्देशक में अग्रणी चार है। यदि आप शाब्दिक प्रतिशत चाहते हैं, तो उपयोग करें%%


9

यह देखकर थोड़ा आश्चर्य होता है कि जब आपको उस echoकमांड का उपयोग करने की अनुमति नहीं है जो आपने printfइसके बजाय कमांड का उपयोग करने के लिए चुना था ।

क्यों नहीं cat?

#!/bin/bash

cat<<'EOF'
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
EOF

लेकिन मुझे प्रश्न के अनुसार इको को प्रिंट कमांड से बदलना पड़ा। लेकिन मदद के लिए धन्यवाद।
नर्वेन

2
$fooपाठ में जैसे स्ट्रिंग की व्याख्या करने से बचने के लिए , cat <<'EOF'इसके बजाय का उपयोग करें cat <<EOF
लेकेनस्टेएन

4

printfएक स्वरूपित प्रिंट है जो एक प्रारूप स्ट्रिंग को इसके पहले पैरामीटर के रूप में लेता है। बाकी मापदंडों का उपयोग प्रारूप स्ट्रिंग में किया जाता है। उपयोग करते समय याद रखने वाली तीन बातें printfहैं:

  1. हालाँकि कई भाषाओं में printfकथन / आदेश / कार्य होते हैं, वे सभी कुछ भिन्न होते हैं इसलिए हमेशा भाषा के विशिष्ट दस्तावेज (C, bash, php, perl, आदि) में विवरणों को सत्यापित करें।

  2. आपको प्रारूप स्ट्रिंग में कभी भी उपयोगकर्ता द्वारा दी गई जानकारी का उपयोग नहीं करना चाहिए। यह हमेशा एक सुरक्षा दोष है। यदि आप एक उपयोगकर्ता की आपूर्ति की गई स्ट्रिंग का उपयोग करना चाहते हैं तो जैसे प्रारूप स्ट्रिंग का उपयोग करें "%s"

  3. बैकस्लैश ( \) और प्रतिशत चिह्न ( %) दोनों ही ऐसे वर्ण हैं, जो निम्नलिखित वर्णों के अर्थ को बदल देते हैं, यदि आप चाहते हैं कि एक एस्केप चरित्र आपके आउटपुट में दिखाई दे, तो उसे बचना चाहिए या किसी अन्य पैरामीटर से खींचा जाना चाहिए। डॉलर चिह्न ( $) प्रिंटफ के लिए विशेष नहीं है, लेकिन शेल के लिए विशेष है, इसलिए अपने उद्धरण से सावधान रहें।

printfसंख्याओं को स्वरूपित करने के लिए बहुत अच्छा है। विवरण के लिए मैन पेज देखें


3

जैसा कि दूसरों ने उल्लेख किया है, %प्रतीक विशेष के लिए है printf

यदि आप किसी स्ट्रिंग को प्रिंट करना चाहते हैं, तो उसे printf %sपहले तर्क के रूप में दें , और दूसरे उद्धरण के रूप में सिंगल कोट्स में घिरा स्ट्रिंग:

printf %s '
Different characters can be represented and supported 
in the printf command, for example: 
x-y, X+Y, –, +, <, >, %, $, #, &.
'

दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरणों का उपयोग करना खोल को प्रतीकों की तरह प्रक्षेपित करने से रोकता है $

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