আমি অন্য কিছু পাইপিং ব্যাশ স্ট্রিংয়ের ম্যানিপুলেশন প্রশ্নগুলি পড়েছি তবে সেগুলি বিশেষায়িত অ্যাপ্লিকেশন বলে মনে হচ্ছে।
মূলত, নীচের আরও সহজ করার উপায় আছে?
পরিবর্তে
$ string='hello world'; string2="${string// /_}"; echo "${string2^^}"
HELLO_WORLD
কিছুটা এইরকম
$ echo 'hello world' | $"{-// /_}" | "${ -^^}"
HELLO_WORLD
সম্পাদনা আমি গতি বজায় রাখা সম্ভব হলে বাশ হেরফেরের মধ্যে থাকতে আগ্রহী (আমার স্ক্রিপ্টগুলিকে ধীরে ধীরে কমিয়ে দেওয়ার প্রবণতা যেমন শেড / অ্যাজকের বিপরীতে)
সম্পাদনা 2: @ জিম্মিজ
আমি দ্বিতীয় উদাহরণটি পছন্দ করি এবং আমাকে একটি ফাংশন তৈরি করতে পরিচালিত করি।
bash_m() { { read x; echo "${x// /_}"; } | { read x; echo "${x^^}"; }; }
echo hello world | bash_m
HELLO_WORLD
trম্যানুয়ালটি বলুন , তবে বিপরীতটি সত্য কারণ প্রক্রিয়াগুলিকে স্প্যান করার সময়টি স্ট্রিং ম্যানিপুলেশনের সময়ের সাথে তুলনায় নগণ্য which sedএবং awkউত্সর্গীকৃত। যদি স্ট্রিংটি অত্যন্ত দীর্ঘ হয় তবে পুরো ব্যাশ ম্যানুয়ালটি বলুন, তবে অভ্যন্তরীণ কিছু সীমাবদ্ধতার কারণে ব্যাশ কেবল পুরোপুরি এগিয়ে যেতে অস্বীকার করতে পারে।
sed, awk, trবা অনুরূপ। জেনা 2 এক্স উত্তরটি দেখুন, যা আমি কিছুক্ষণ আগে সম্পাদনা করেছি ঠিক এই তথ্যটি যুক্ত করে: unix.stackexchange.com/questions/162221/… আপনি এটি একই প্রশ্নের টেরডন উত্তরের সাথে তুলনা করতে চাইতে পারেন যেখানে তিনি সংক্ষিপ্ত স্ট্রিংয়ের জন্য সময় দেন যেখানে কেস প্রক্রিয়া spawning সবচেয়ে বেশি সময় নেয়। আপনি নিজে এটি পরীক্ষা করতে পারেন এবং ফলাফল পোস্ট করতে পারেন।
read x; echo $xকোনও পারফরম্যান্সের চেয়ে ভাল? সিনট্যাক্সটি কোনও খাটো বা ক্লিনার দেখায় না। x=${x// /_}; x=${x^^}অনেক সংক্ষিপ্ত উপায় হিসেবে একই জিনিস করতে হয় {read x; echo ${x...। পারফরম্যান্স যতদূর যায়, @ জিম্মিজ উল্লেখ করেছেন যে tr/ থেকে sedআরও দ্রুত হবে bashকাঁটা সংখ্যা সমান। পাইপ ব্যবহারের ফলে সর্বদা অতিরিক্ত প্রক্রিয়া হয় যার ফলে কাঁটাচামচ সংরক্ষণের যুক্তি আর প্রয়োগ হয় না। সুতরাং, যদি পাইপ ব্যবহার করা হয় তবে কেবল sed/ trইত্যাদি ব্যবহার করুন যদি আপনি এটি ব্যাশে করতে পারেন তবে এটি করুন এবং এই read x; echo $xবাজে কথা এড়িয়ে যান ।