শেল স্ক্রিপ্টে স্পেসের আগে এবং তার আগে স্ট্রিং কীভাবে বিভক্ত করবেন?


18

আমার একটি ভেরিয়েবল রয়েছে যা প্রতিধ্বনির মতো দেখায়

$ echo $var
129 148

আউটপুট হিসাবে আমাকে নিতে হবে মাত্র 129। আমি কীভাবে 129 এবং 148 ভাগ করব?


echo "${var% *}" && echo "${var#* }"...
জেসনওয়ারিয়ান

উত্তর:


32

জেসনওয়ারিয়ান এর পরামর্শ ছাড়াও , আপনি ব্যবহার করতে পারেন cut:

echo $var | cut -d' ' -f1

উপরে cutগুলি echoএকটি স্থান বিভেদক (সঙ্গে আউটপুট -d ' ') এবং আউটপুট প্রথম ক্ষেত্র ( -f1)


এটা কাজ করছে না. আমি ইতিমধ্যে এটি ব্যবহার করেছি। এটি কমান্ড পাওয়া যায় না বলে।
surbhi

3
@surbhi কি বলে কমান্ড পাওয়া গেল না? cutএকটি স্ট্যান্ডার্ড ইউটিলিটি। আপনার স্ক্রিপ্ট সম্ভবত অন্য কোথাও একটি ত্রুটি আছে। আরও সাধারণভাবে, কখনই "এটি কাজ করছে না" বলবেন না। আপনি কী কোডটি চালিয়েছেন, ঠিক কী হয়েছিল এবং কপির পেস্ট ত্রুটি বার্তাগুলি সর্বদা বলুন।
গিলস

এই উত্তরটি সবচেয়ে সংক্ষিপ্ত এবং প্রত্যক্ষ উপায় হিসাবে গ্রহণ করা উচিত। অবশ্যই প্রদত্ত উদাহরণের চেয়ে জটিল যে ক্ষেত্রে এটি কার্যকর হবে না।
ড্যান এনগুইন

10

এটি করার একটি পরিষ্কার উপায় হ'ল স্পেসে স্ট্রিং বিভক্ত করার জন্য ব্যাশ অ্যারে ব্যবহার করা। আপনি কেবল বন্ধনী ব্যবহার করে একটি অ্যারে ঘোষণা করতে পারেন:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"

এটি বলে কমান্ডটি পাওয়া যায় নি
surbhi

এটি আপনার উপর ব্যাশ ব্যবহারের উপর নির্ভর করে। আপনি যদি আলাদা শেল ব্যবহার করেন তবে এটি কাজ নাও করতে পারে। echo $SHELLপ্রদর্শন করা উচিত: /bin/bashবা অনুরূপ।
গগৌড

কাজ করে না zsh(;
TonyH

এই কাজ করে ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.