শেল স্ক্রিপ্টে নিউলাইন ছাড়া 'ইকো' '


540

echoআমার স্ক্রিপ্টে আমার সমস্যা আছে :

echo -n "Some string..."

কপি করে প্রিন্ট

-n Some string...

এবং পরের লাইনে চলে আসে। কনসোলে এটি নিউলাইন ছাড়াই সঠিকভাবে কাজ করছে:

Some string...

2
আপনি কোন বোর্ন শেল প্রয়োগ করছেন? যদি আমি bashবোর্ন শেল মোডে চালাই তবে এটি এখানে দুর্দান্ত কাজ করে। এছাড়াও, আপনি সত্যই বোর্ন শেলটিকে আপনার ইন্টারেক্টিভ শেল হিসাবে ব্যবহার করছেন কিছুটা অসম্ভব?
ফ্যাটালআরর

4
উবুন্টুতে:echo -ne "text without new line: "; echo "some text";
zsoltii

আমি জানি এটি অনেক পুরানো, তবে এটি উইন্ডোজ 10 এ আমার জন্য একটি নতুন লাইন ছাড়াই একটি সময়কাল যোগ করতে কাজ করে: প্রতিধ্বনি | সেট / পি = "।"
স্প্ল্যাটেন

উত্তর:


571

echoবিভিন্ন আচরণ সহ কমান্ডের একাধিক সংস্করণ রয়েছে । স্পষ্টতই আপনার স্ক্রিপ্টের জন্য ব্যবহৃত শেলটি এমন একটি সংস্করণ ব্যবহার করে যা স্বীকৃত নয় -n

printfকমান্ড অনেক বেশি সামঞ্জস্যপূর্ণ আচরণ আছে। echoসাধারণ জিনিস যেমন ভাল echo hello, তবে আমি printfআরও জটিল কিছু জন্য ব্যবহার করার পরামর্শ দিই ।

আপনি কোন সিস্টেমে আছেন এবং আপনার স্ক্রিপ্টটি কোন শেল ব্যবহার করে?


46
লাইন দিয়ে শুরু করে #!/bin/bashএটি কাজ করেছিল। সাধারণত আমি বাশ নিয়ে কাজ করছি।
কিওয়ার্টজ

আমি চাই সিএমডি-তে উইন্ডোজ সমতুল্য ছিল :( আমি যতদূর দেখতে পাচ্ছি, ঠিক একই আচরণ অর্জনের জন্য কাজ করার উপায় নেই
kayleeFrye_onDeck

2
@ কেলেফ্রি_অনডেক: সম্ভবত printfকমান্ডটির একটি উইন্ডোজ সংস্করণ রয়েছে ।
কিথ থম্পসন

আমি চাই. echoসর্বদা নতুন লাইন যুক্ত করে ... কর্মক্ষেত্রটি সর্বোত্তম en
কেলেলিফ্রি_ডোনেক

2
@ আল্পার %এটি আপনার শেল প্রম্পট। এটি ব্যবহার করে দেখুন, এবং সাবধানে দেখুন:printf hello; sleep 5
কেথ থম্পসন

150

bash "প্রতিধ্বনি" নামে একটি "অন্তর্নির্মিত" কমান্ড রয়েছে:

$ type echo
echo is a shell builtin

অতিরিক্তভাবে, একটি "প্রতিধ্বনি" কমান্ড রয়েছে যা যথাযথ এক্সিকিউটেবল (অর্থাত্ শেলটি কাঁটাচামচ করে এবং সম্পাদন করে, যার /bin/echoঅর্থ echoএটি ব্যাখ্যা এবং কার্যকর করার বিপরীতে ):

$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21  2011 /bin/echo

উভয় echoএর WRT এর সাথে \cএবং এর আচরণ and-n পরিবর্তিত হয়। আপনার সেরা বাজিটি হ'ল ব্যবহার করা printf, যা আমি দেখেছি এমন চারটি পৃথক * এনআইএক্স স্বাদে উপলভ্য:

$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"

3
গভীরতার উত্তরে ব্যাপকভাবে ধন্যবাদ!
দার্ট এগারিজিয়াস

91

দিয়ে চেষ্টা করুন

echo -e "Some string...\c"

এটি প্রত্যাশার মতো আমার জন্য কাজ করে (যেমনটি আমি আপনার প্রশ্ন থেকে বুঝেছি)।

নোট করুন যে আমি manপৃষ্ঠা থেকে এই তথ্য পেয়েছি । manএই পৃষ্ঠা থেকে জানতে নোট শেলের নিজস্ব সংস্করণ থাকতে পারে echo, এবং আমি নিশ্চিত যদি নই bashনিজস্ব সংস্করণ রয়েছে।


আমাকে সঠিক দিকে ইঙ্গিত করার জন্য +1, যদিও প্রতিধ্বনী যা -ne বিকল্পটি স্বীকৃতি দেয় না সম্ভবত -e (প্রয়োজন হবে না) বিকল্পটিও চিনে না তাই আপনি সম্ভবত echo "some string...\c"পরিবর্তে বলতে চান । তবে আপনার যদি বন্যভাবে পৃথক পৃথক ইকো কমান্ডের সাহায্যে একাধিক ব্যাশের রূপগুলি সমর্থন করার প্রয়োজন হয় তবে আপনি সম্ভবত প্রিন্টফ ব্যবহার করার চেয়ে ভাল বা আপনার যেমন ইকো কমান্ডের দক্ষতা পরীক্ষা করতে হবে এমন কিছু [ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"(কমপক্ষে ব্যাশ পাশাপাশি supports সি সমর্থন করে, তাই ব্যবহার করার প্রয়োজন নেই) -n বিকল্প, তবে আপনার বাশের জন্য -e প্রয়োজন)
টিমো

আমার কাছে এটি ওপি-র ক্ষেত্রে ঠিক কী করে: আক্ষরিক আউটপুট দেয়। আমার ধারণা
প্রিন্টফটি

- আমরা পজিক্স শেল স্ক্রিপ্টে কাজ করবে না, এটি পরিবর্তে স্ক্রিনে আউটপুট হবে।
টমাস ডিগানান

7

এটি অর্জনের জন্য মূলত দুটি পদ্ধতি রয়েছে যা আমি প্রায়শই ব্যবহার করি:

1. কার্সার থেকে মুক্তি অক্ষর ব্যবহার করে ( \c)echo -e

উদাহরণ :

for i in {0..10..2}; do
  echo -e "$i \c"              
done
# 0 2 4 6 8 10
  • -eপতাকা স্ট্রিংয়ে স্কেপ অক্ষরগুলিকে সক্ষম করে ।
  • \cসি আর্সারটিকে বর্তমান লাইনে ফিরিয়ে আনে ।

অথবা

2. ব্যবহার printfকমান্ড

উদাহরণ :

for ((i = 0; i < 5; ++i)); do
  printf "$i "
done
# 0 1 2 3 4

3

যদি আপনি "কমান্ড" এর মতো অন্যান্য কমান্ডের সাহায্যে যদি ইফো এর ভিতরে প্রতিধ্বনি ব্যবহার করেন তবে এটি সেটিংসটিকে উপেক্ষা করবে এবং এটি যে কোনও উপায়ে একটি নতুন লাইনে চলে যাবে।


2

শুধু সবচেয়ে জনপ্রিয় লিনাক্স Ubuntu & এটা bash:

  1. আপনি কোন শেল ব্যবহার করছেন তা পরীক্ষা করে দেখুন? বেশিরভাগ নীচে কাজ করে, অন্যথায় এটি দেখুন :

    echo $0

  2. যদি উপরে প্রিন্ট হয় bashতবে নীচে কাজ করবে:

    printf "hello with no new line printed at end"
    অথবা
    echo -n "hello with no new line printed at end"


1

আমি এখনই আপনার আউটপুট মুদ্রণ নীচে হিসাবে বিশ্বাস করি

~ echo -e "String1\nString2"
String1
String2

আপনি xargsএকই লাইনে মাল্টলাইন stdout পেতে ব্যবহার করতে পারেন ।

 ~ echo -e "String1\nString2" | xargs
String1 String2

 ~

0

আপনি যখন যান এবং শেল স্ক্রিপ্ট লিখেন সর্বদা প্রথম! আপনার প্রথম লাইনে #! / Usr / bin / env বাশ হিসাবে রাখেন। এই শেলটি এড়ানোর ক্রমগুলি বাদ দেয় না বা পরিচালনা করে না। প্রাক্তন প্রতিধ্বনি "এটি প্রথম \ n লাইন" প্রিন্ট করে এটি প্রথম \ n লাইন।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.