উত্তর:
"প্যারামিটার সম্প্রসারণ" এর সাথে ব্যাশে me me পরামিতি: অফসেট: দৈর্ঘ্য}
$ var=abcdef
$ echo ${var:0:1}
a
$ echo ${var:3:1}
d
সম্পাদনা করুন: প্যারামিটার সম্প্রসারণ ছাড়াই (খুব মার্জিত নয়, তবে এটিই আমার কাছে প্রথম এসেছিল)
$ charpos() { pos=$1;shift; echo "$@"|sed 's/^.\{'$pos'\}\(.\).*$/\1/';}
$ charpos 8 what ever here
r
echo ${var: -2:1}
zshএবং mksh।
প্যারামিটার বিস্তারের বিকল্প হ'ল expr substr
substr STRING POS LENGTH
substring of STRING, POS counted from 1
উদাহরণ স্বরূপ:
$ expr substr hello 2 1
e
substrফ্রিবিএসডি, নেটবিএসডি বা ওএস এক্স থেকে এক্সপ্রেসের অন্তর্ভুক্ত নয় This এটি কোনও বহনযোগ্য সমাধান নয়।
substrমূলত GNU এক্সটেনশান নয়। এর বাস্তব বাস্তবায়ন expr70 এর দশকের শেষদিকে পিডব্লিউবি ইউনিক্স থেকে এসেছিল এবং হয়েছে substr(তবে হয়নি :)।
cut -c
যদি ভেরিয়েবলটিতে নিউলাইন থাকে না তবে আপনি এটি করতে পারেন:
myvar='abc'
printf '%s\n' "$myvar" | cut -c2
আউটপুট:
b
awk substr ভেরিয়েবলের নতুন লাইন থাকলেও এটি কার্যকর হয় এমন আরও একটি পসিক্স বিকল্প:
myvar="$(printf 'a\nb\n')" # note that the last newline is stripped by
# the command substitution
awk -- 'BEGIN {print substr (ARGV[1], 3, 1)}' "$myvar"
আউটপুট:
b
printf '%s\n'হ'ল পালানোর চরিত্রগুলির সমস্যাগুলি এড়ানো: /programming//a/40423558/895245 উদাহরণস্বরূপ:
myvar='\n'
printf '%s\n' "$myvar" | cut -c1
আউটপুট \হিসাবে প্রত্যাশিত।
আরও দেখুন: /programming/1405611/extracting-first-two-characters-of-a-string-shell-scriptting
উবুন্টু 19.04 এ পরীক্ষিত।
printf '%s' "$myvar" | cut -c2পসিক্স নয় কারণ আউটপুট printfকোনও পাঠ্য নয় যেমন $myvarনতুন লাইনের অক্ষরে শেষ হয়। এটি অন্যথায় ধরে নেয় যে ভেরিয়েবলটিতে প্রতিটিcut ইনপুটটির প্রতিটি লাইন কেটে দেয় বলে নতুন লাইন অক্ষর থাকে না ।
awkআরও একটি দক্ষ ও সঙ্গে নির্ভরযোগ্য হতে হবেawk -- 'BEGIN {print substr (ARGV[1], 2, 1)}' "$myvar"
cut, এটি মাল্টি-বাইট অক্ষরগুলির জন্য কাজ করে না (মাক বা ব্যস্তবক্সের জন্য একই)
printf 'abc '| cut -c2এটি ভুল কারণ না \n(এটি সম্পর্কে আমি জানিনা), বা মাইভারের নতুন লাইনে থাকলে (কমান্ডটি ব্যর্থ হবে)?
cutইনপুটটি পাঠ্য না থাকলে এর আচরণ নির্ধারিত নয় (যদিও cutপ্রয়োগগুলি লাইনগুলি বা স্বেচ্ছাসেবী দৈর্ঘ্য হ্যান্ডেল করার জন্য প্রয়োজন)। এর আউটপুটটি পাঠ্যprintf abc নয় কারণ এটি একটি নতুন লাইনের অক্ষরে শেষ হয় না। বাস্তবায়নের উপর নির্ভর করে অনুশীলনে, আপনি যদি এটিটি পাইপ করেন তবে আপনি হয় , বা কিছুই পাবেন না । আপনার পসিক্স দ্বারা নির্দিষ্ট একটি আচরণ পেতে হবে (যা আউটপুট করা প্রয়োজন )cut -c2bb<newline>printf 'abc\n' | cut -c2b<newline>
সঙ্গে zshবা yash, আপনি ব্যবহার করতে চাই:
$ text='€$*₭£'
$ printf '%s\n' "${text[3]}"
*
(মধ্যে zsh, আপনি এটি সংক্ষিপ্ত করতে পারেন printf '%s\n' $text[3])।
আপনি কাট কমান্ড ব্যবহার করতে পারেন। তৃতীয় পোস্ট পেতে:
echo "SAMPLETEXT" | cut -c3
এই লিঙ্কটি দেখুন http://www.folkstalk.com/2012/02/cut-command-in-unix-linux-exferences.html
( উন্নত ক্ষেত্রে ) তবে, আইএফএস পরিবর্তন করাও একটি ভাল জিনিস, বিশেষত যখন আপনার ইনপুটটিতে ফাঁকা স্থান থাকতে পারে। একা একা, নীচেরটি ব্যবহার করুন
saveifs=$IFS
IFS=$(echo -en "\n\b")
echo "SAMPLETEXT" | cut -c3
IFS=$saveifs
IFSআপনার পোস্ট করা কোডটি কীভাবে খেলবে তা আমি দেখতে পাচ্ছি না ।