শেল স্ক্রিপ্টের অক্ষর গণনা করতে সমস্যা হচ্ছে


11

আমি বেসিকগুলি শিখার চেষ্টা করছি এবং আমি আমার স্ক্রিপ্টটি ব্যবহারকারীর ইনপুটটির চরিত্রগুলি গণনা করে একটি সমস্যা নিয়ে এসেছি। এখানে আমার স্ক্রিপ্ট, কেউ ভুল করতে পারে যেখানে আমি নির্দেশ করতে পারেন দয়া করে?

#!/bin/bash

echo "Enter a word!"    
read INPUT_STRING   
len= echo $INPUT_STRING | wc -c 
echo "Your character length is " $len
exit

উত্তর:


12

প্রতিটি শুরু শক্ত:

#!/bin/bash
read INPUT
echo $INPUT
len=$(echo -n "$INPUT" | LC_ALL=C.UTF-8 wc -m)
echo $len

বিশেষত, আশেপাশে কোনও স্থান থাকতে হবে না =এবং একটি পৃথক কমান্ডের ভিতরে আবদ্ধ হওয়া প্রয়োজন $(...)। এছাড়াও, আপনি "এই সিনট্যাক্সটি ব্যবহার করে আপনার ভেরিয়েবলগুলি উদ্ধৃতিতে লিখতে চাইতে পারেন "${INPUT}", এটি নিশ্চিত করে যে ভেরিয়েবলটি দুর্ঘটনাক্রমে কী ঘটেছে তার সাথে সংঘবদ্ধ নয় এবং বিশেষ অক্ষর (যেমন নিউলাইনস \n) ধারণ করতে পারে ।


1
আপনাকে ধন্যবাদ আমার কোড এখন কাজ করে, এবং অতিরিক্ত সাহায্য ভবিষ্যতে আমাকে সহায়তা করবে। ধন্যবাদ
জ্যাক স্লেটার

@ জ্ঞাক এই অন্তর্দৃষ্টিপূর্ণ সম্পাদনার জন্য আপনাকে ধন্যবাদ! এখনও শিখছি ...
সেবাস্তিয়ান

ভবিষ্যতের রেফারেন্সের জন্য দুঃখিত আপনি কী আমাকে বলতে পারেন যে -n এবং LC_ALL = C.UTF-8 কারণ আমি এর উদ্দেশ্য সম্পর্কে জানতে চাই। আপনাকে ধন্যবাদ
জ্যাক স্লেটার

1
একটি কমান্ড লাইন সুইচ অর্থ খোঁজার জন্য ব্যবহার করার চেষ্টা করুন manকমান্ড (এই ক্ষেত্রে man echo: -n do not output trailing newline)। বারবার manঅনুরোধ আপনার লিনাক্স দক্ষতা দ্রুত বাড়িয়ে তুলবে। আরও তথ্যের জন্য LC_ALLএই প্রশ্ন / উত্তরটি দেখুন
সেবাস্তিয়ান

1
লিঙ্ক থেকে অনুলিপি: আপনার স্ক্রিপ্টে হস্তক্ষেপের জন্য ব্যবহারকারীর সেটিংস এড়াতে আপনি সাধারণত একটি কমান্ড চালান LC_ALL=C। উদাহরণস্বরূপ, আপনি যদি [a-z]একটি থেকে জেড থেকে 26 টি এসসিআইআইয়ের অক্ষরগুলি মেলাতে চান তবে আপনাকে সেট করতে হবেLC_ALL=C
সেবাস্তিয়ান

8

আমি মনে করি ব্যবহার করতে হবে

len=${#INPUT_STRING}

অন্যথায় প্রতিধ্বনির সাহায্যে রেখাযুক্ত অক্ষরের শেষটিও গণনা করা হবে। যদি না আপনি এটি চান না।


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