কোনটি প্রিন্টফ বা ইকো ভাল?


16

বার্তা এবং মুদ্রণ ডেটা প্রদর্শনের জন্য দুটি কমান্ড উপলব্ধ রয়েছে printfএবং echo
তাহলে তারা কীভাবে আলাদাভাবে ব্যবহার করেছে? কোনটি বেশি পছন্দনীয়?


8
আপনি উত্তরটি এখানে পাবেন: unix.stackexchange.com/a/65819
ব্যবহারকারী 218740

উত্তর:


27

পছন্দসই এবং সর্বাধিক ব্যবহৃত একই জিনিস নয়। যদিও printfবিভিন্ন কারণে আরও ভাল, বেশিরভাগ লোকেরা এখনও ব্যবহার করেন echoকারণ বাক্য গঠনটি আরও সহজ।

আপনার কেন পছন্দ করা উচিত তার প্রধান কারণগুলি হ'ল printf:

  1. echo মানক নয়, এটি বিভিন্ন সিস্টেমে আলাদা আচরণ করবে ve
  2. আপনি যখন আসলে আসলে কী চালাচ্ছেন তা অনুমান করা শক্ত echo foo। উদাহরণস্বরূপ, আমার ডেবিয়ান সিস্টেমে:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    আপনি দেখতে পাচ্ছেন, দুটি পৃথক echoকমান্ড রয়েছে, একটি হ'ল শেল (এই ক্ষেত্রে ব্যাশ) বিল্টিন এবং অন্যটি পৃথক বাইনারি। মনে রাখবেন যে bashএকটি printfবিল্টিন রয়েছে তবে এর আচরণটি আরও মানসম্পন্ন তাই এটি কোনও ইস্যুতে কম নয় (এটি নির্দেশ করার জন্য @ রাদুরাদেনুকে ধন্যবাদ)।

  3. যেহেতু echoসাপোর্ট কমান্ড লাইনটি কিছু (তবে সমস্ত নয়) বাস্তবায়ন করেছে , একটি দিয়ে শুরু হওয়া একটি স্ট্রিং মুদ্রণ করা শক্ত -। যদিও অনেকগুলি প্রোগ্রাম --স্যুইচগুলির সমাপ্তি এবং যুক্তিগুলির সূচনা বোঝাতে সহায়তা করে (উদাহরণস্বরূপ, এতে থাকা grep -- -a fileরেখাগুলি সন্ধান করবে ), না does তো, আপনার কীভাবে প্রিন্ট আছে ?file-aechoecho-n

    $ echo -n           ## no output
    $ echo '-n'         ## no output
    $ echo "-n"         ## no output
    $ echo \-n          ## no output
    $ echo -e '\055n'   ## using the ASCII code works but only on implementations
    -n                  ## that support -e
    

    printf এটি সহজেই করতে পারেন:

    $ printf -- '-n\n'
    -n
    $ printf '%s\n' -n
    -n
    $ printf '\055n\n' 
    -n
    

আরও তথ্যের চেয়ে আপনি কি কখনো কেন উপর জানতে চেয়েছিলেন জন্য printfবেশী ভালো echo, উপর একটি অনুরূপ প্রশ্নের এই উত্তর দেখুন http://unix.stackexchange.com :

/unix//a/65819/22222


1
ভাল উত্তর দিয়েছেন। এটি আমাকে printfআরও ভাল দোভাষী হিসাবে পছন্দ করতে সহায়তা করে ।
পান্ড্য

3
বিন্দু 2 করুন: একই সত্য হয় printf(দেখুন type -a)।
রাদু রেডানু

2
@ রাদুরাদেয়ানু সত্য, তবে পসিক্সে printfআরও কঠোরভাবে সংজ্ঞায়িত হয়েছে এবং আমি মনে করি যে বিল্টিন একই মান অনুসরণ করে। POSIX চশমা জন্য echoঅন্যদিকে কম কঠোর এবং এমনকি স্পষ্টভাবে বলে যে সেখানে বাস্তবায়নের এবং যে মধ্যে পার্থক্য হবে? printfপছন্দের দিতে হবে।
টেরডন

কি দারুন. সুতরাং ব্যবহার করার জন্য আক্ষরিক শূন্যগত উদ্দেশ্যগত প্রযুক্তিগত সুবিধা রয়েছে echoএটা কি ঠিক?
জেমস আশ্চর্যডুড

1
@ জেমসআউইউইলডুড না, পুরোপুরি কোনও প্রযুক্তিগত সুবিধা নেই। echoপরিবর্তে ব্যবহারের একমাত্র কারণ printfহ'ল ফর্মাটি সহজ হতে পারে। আপনি কী মুদ্রণ করছেন তা যদি আপনি জানেন তবে echo fooটাইপ করা দ্রুত এবং সহজ printf 'foo\n'। এগুলি ছাড়াও স্ক্রিপ্টগুলি লেখার সময় যেখানে একটি পরিবর্তনশীল মুদ্রণ করা দরকার সেখানে ব্যবহার করার উপযুক্ত কারণ নেই echo
টেরডন

4

কোনটি পছন্দনীয় তা জিজ্ঞাসা করা নিজেই অসম্পূর্ণ।

যদি সকলেরই কাজটি করতে ইচ্ছুক হয় তবে নিউলাইনগুলি দ্বারা টার্মিনেটের এক বা একাধিক লাইন নির্গত হয় , তবে প্রতিধ্বনিতই যথেষ্ট। বিশেষত এমন একটি "আংশিক রেখা" সহ যে আরও নতুন করে চালিত উদ্দেশ্যযুক্ত , যদি নিউলাইন থাকে না, তবে সেই উদ্দেশ্যে প্রিন্টফ সবচেয়ে ভাল ।


echoবাস্তবায়নের উপর নির্ভর করে সহজেই "নতুন লাইন এড়ানো" কাজটি সম্পন্ন হয় echo -n। প্রকৃতপক্ষে, -nপ্রতিধ্বনির বৈশিষ্ট্যগুলির মধ্যে সবচেয়ে বহনযোগ্য। পসিক্সের মতে, এটি সিস্টেমভি থেকে অনুপস্থিত তবে বেশিরভাগ ইউনিয়নে উপস্থিত রয়েছে।
টেরডন

প্রতিধ্বনির সাহায্যে নিউলাইনগুলি এড়ানোর চেষ্টা না করার জন্য আমি পর্যাপ্ত বিভিন্ন ইউনিয়নে কাজ করেছি। এসসিও, এআইএক্স, এইচপি-ইউএক্স এবং লিনাক্স জুড়ে পোর্টেবল স্ক্রিপ্টগুলি রচনা ... চ্যালেঞ্জিং।
মন্টি হার্ড

ওহ একেবারে, সেখানে কোন তর্ক নেই। আমি শুধু বলছি, নতুন লাইনটি সমস্যাগুলির মধ্যে সর্বনিম্ন। আপনি একটি নন-জিএনইউ সিস্টেমে পোর্ট করার চেষ্টা করার সাথে সাথে সমস্ত বেট বন্ধ হয়ে যায়। আমি মনে করি আপনি -nBSDs এবং SystemV এর উপর নির্ভর করতে পারেন তবে অন্য কিছু, আমার কোনও ধারণা নেই।
টেরডন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.