প্রতিধ্বনিতে কাজ না করা প্রতিধ্বনি নিউলাইন চরিত্র


13

আমি ব্যাশ স্ক্রিপ্ট প্রচুর আছে আছে echoবিবৃতি এবং এছাড়াও আমি ওরফে echoকরতে echo -eউভয় .bash_profileএবং .bashrc, যাতে নতুন লাইন এক বিবৃতিতে জন্য সঠিকভাবে ছাপা হয় মত echo 'Hello\nWorld'আউটপুট হওয়া উচিত

Hello
World

তবে আউটপুট আমি পাচ্ছি

Hello\nWorld

এমনকি আমি shopt -s expand_aliasesস্ক্রিপ্টে ব্যবহার করার চেষ্টা করেছি , এটি কোনও লাভ করে না

আমি আমার স্ক্রিপ্ট হিসাবে চালাচ্ছি bash /scripts/scriptnm.sh; যদি আমি এটি চালিত করি . /scripts/scriptnm.shআমি যেমন পছন্দসই আউটপুট পাচ্ছি ...


3
এলিয়াসিং echoমত যদি আপনি চান একটি খারাপ অভ্যাস এই প্রোগ্রামটিতে হয়
shellholic

1
ডাবল কোট ব্যবহার করুন যাতে inter n ব্যাখ্যা করা হয়। একক উদ্ধৃতিগুলি \ n এর ব্যাখ্যা এবং অন্যান্য জিনিসের একগুচ্ছ প্রতিরোধ করে।
বিলথোর

উত্তর:


16

এর মিশ্র ইতিহাসের echoঅর্থ এর ডিফল্ট অপারেশন শেল থেকে শেলের মধ্যে পরিবর্তিত হয়। পসিএক্স উল্লেখ করে যে echoপ্রথম যুক্তিটি -nবা কোনও যুক্তিতে ব্যাকস্ল্যাশ থাকলে ফলাফলটি "বাস্তবায়ন-সংজ্ঞায়িত" হয় ।

এটি ব্যবহার করা আরও নির্ভরযোগ্য printf(হয় বিল্ট-ইন কমান্ড বা বহিরাগত কমান্ড হিসাবে) যেখানে আচরণটি আরও সুনির্দিষ্টভাবে সংজ্ঞায়িত করা হয়: সি-স্টাইলের ব্যাকস্ল্যাশ পলায়ন এবং ফর্ম্যাট স্পেসিফায়ারগুলি ফর্ম্যাট স্ট্রিংয়ে সমর্থন করা হয় (প্রথম যুক্তি)।

printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar

আপনি এর ব্যাকস্ল্যাশ পালাবার ক্রম সম্প্রসারণ নিয়ন্ত্রণ করতে পারেন ব্যাশ 's echoসঙ্গে বিল্ট-ইন কমান্ড xpg_echoশেল বিকল্প।

প্রতিটি প্রতিধ্বনি কমান্ড যুক্ত না করে স্বয়ংক্রিয়ভাবে ব্যাকস্ল্যাশ পলায়নের জন্য এটি কোনও বাশ স্ক্রিপ্টের শীর্ষে সেট echoকরুন -e

shopt -s xpg_echo
echo 'foo\nbar'

শপট-এস xpg_echo; আমার জন্য কাজ করেছেন।
বাশুসার

6

আপনি যখন ব্যবহার করেন bash myfile.sh, বাশকে পৃথক প্রক্রিয়াতে "ব্যাচ" মোডে চালানো হয় এবং এর প্রোফাইল বা আরসিফাইলটি পড়ে না

আপনি যখন ব্যবহার করবেন তখন . myfile.shফাইলটি বর্তমান শেল প্রক্রিয়া দ্বারা উত্সাহিত হয় (এর সামগ্রীগুলি যেমন আপনার দ্বারা টাইপ করা হয়েছিল), সুতরাং এটি আপনার বর্তমানে সংজ্ঞায়িত উপকরণগুলি দেখে।

সাধারণভাবে, স্ক্রিপ্টগুলি লিখতে এটি খুব খারাপ ধারণা যা কোনও নির্দিষ্ট শেল কনফিগারেশনের উপর নির্ভর করে, বিশেষত উপন্যাসগুলি, যদি না আপনি স্ক্রিপ্টে নিজেই এটি সংজ্ঞায়িত করেন । ( কখনও কখনও ব্যবহারকারীর উপর নির্ভর করবেন না.bashrc , এমনকি এটি নিজের নিজস্ব হলেও))


5

প্রস্তাবিত অনুশীলনটি হ'ল printfসমস্ত নতুন স্ক্রিপ্টগুলির জন্য ব্যবহার করা ।

printf '%s\n%s\n' "Hello" "World"

printf '%s\n' "Hello\nWorld"

প্রতিধ্বনি তুলনায় +1 প্রিন্টফ ব্যবহার করা কিছুটা জটিল তবে এটি প্রতিধ্বনির অসঙ্গতি এড়ানোর চেয়ে বেশি অর্থ প্রদান করে।
গর্ডন ডেভিসন

1

এটি টার্মিনালে সূক্ষ্মভাবে কাজ করে

#!/bin/bash
alias echo="echo -e"
echo "Hello\nWorld"

একটি ফাইলে সংরক্ষণ করুন এবং এটিকে ছাড়যোগ্য (chmod + x) করুন

। / আপনার_ফাইলে হিসাবে চালান


এটিকে বাশ আপনার_ফাইল হিসাবে চালান এবং আউটপুট পরীক্ষা করুন।
বাশুসার

প্রত্যাশিত হিসাবে কাজ করে
LaLeX

তবে প্রতিধ্বনি "হ্যালো \ n ওয়ার্ল্ড" প্রত্যাশিত আউটপুট দেখাচ্ছে না। প্রতিধ্বনির প্রতিধ্বনি হিসাবে ইতিমধ্যে
এলিজ করা হয়েছে

যেহেতু এটি ওরফে প্রতিধ্বনিতে খারাপ অনুশীলন হয়েছে (এটির উপর নির্ভর করে এমন প্রোগ্রামগুলি ভেঙে যেতে পারে) আপনার উপনামটি সরিয়ে ফেলতে হবে এবং আপনার স্ক্রিপ্টে প্রতিধ্বনির সন্ধানের জন্য এটিকে প্রতিস্থাপন করুন
LaLeX

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