আপনি অন্যথায় নিয়মিত প্রোগ্রাম ব্যবহার করার কারণে আপনি কমান্ড / পাইপলাইনে বাশ ফাংশন ব্যবহার করতে পারেন। ফাংশনগুলি সাব-শেল এবং ট্রানজিটিভভাবে কমান্ড সাবস্টিটিউশনের জন্যও উপলব্ধ are
VAR=$(scan)
বেশিরভাগ ক্ষেত্রে আপনি যে ফলাফলটি চান তা অর্জন করার সোজা উপায়। আমি নীচে বিশেষ কেস রূপরেখা করব।
ট্রেলিং নিউলাইনগুলি সংরক্ষণ করা:
কমান্ড সাবস্টিটিউশনের অন্যতম (সাধারণভাবে সহায়ক) পার্শ্ব প্রতিক্রিয়া হ'ল এটি যে কোনও সংখ্যক ট্রেলিং নিউলাইনগুলি কেটে ফেলবে। যদি কেউ ট্রেলিং করা নতুন লাইনের সংরক্ষণ করতে চায়, তবে সাবসেলের আউটপুটে একটি ডামি চরিত্র যুক্ত করতে পারে এবং পরবর্তীতে এটি প্যারামিটার প্রসারিত করে ফেলা যায়।
function scan2 () {
local nl=$'\x0a';
echo "output${nl}${nl}"
}
VAR=$(scan2; echo "x"); VAR="${VAR%%x}"
echo "${VAR}---"
প্রিন্ট (3 টি নতুন লাইন রাখা):
output
---
একটি আউটপুট প্যারামিটার ব্যবহার করুন: সাব-শেল এড়ানো (এবং নতুন লাইনের সংরক্ষণ করা)
ফাংশনটি যা অর্জন করার চেষ্টা করে তা যদি ব্যাশ v4.3 এবং তার উপরে একটি স্ট্রিংকে একটি ভেরিয়েবলের "রিটার্ন" করতে হয় তবে যাকে বলা হয় এটি ব্যবহার করতে পারে nameref
। নেমরেফস একটি ফাংশনকে এক বা একাধিক ভেরিয়েবল আউটপুট পরামিতিগুলির নাম নিতে দেয়। আপনি নেমরেফ ভেরিয়েবলকে জিনিসগুলি বরাদ্দ করতে পারেন, এবং এটি এমন হয় যেন আপনি পরিবর্তনটিকে 'পয়েন্ট / রেফারেন্সে' পরিবর্তন করেছেন।
function scan3() {
local -n outvar=$1
local nl=$'\x0a'
outvar="output${nl}${nl}"
}
VAR="some prior value which will get overwritten"
scan3 VAR
echo "${VAR}==="
মুদ্রণ:
output
===
এই ফর্মটির কয়েকটি সুবিধা রয়েছে। যথা, এটি আপনার ফাংশনটিকে কোথাও গ্লোবাল ভেরিয়েবল ব্যবহার না করে কলারের পরিবেশ পরিবর্তন করতে দেয়।
দ্রষ্টব্য: আপনার ফাংশনগুলি ব্যাশ বিল্টিনগুলিতে খুব বেশি নির্ভর করে যদি নেমারেফ ব্যবহার করা আপনার প্রোগ্রামের কার্যকারিতা উন্নত করতে পারে, কারণ এটি একটি সাবশেল তৈরি করা এড়িয়ে যায় যা ঠিক পরে ফেলে দেওয়া হয়। এটি সাধারণত ছোট ফাংশনগুলির প্রায়শই পুনঃব্যবহারের জন্য আরও বোধ করে, যেমন ফাংশনগুলি শেষ হয়echo "$returnstring"
এটি প্রাসঙ্গিক। https://stackoverflow.com/a/38997681/5556676