ওএস এক্সে 4.3 টি সাবস্ট্রিং নেতিবাচক দৈর্ঘ্য Bash


12

Bashণাত্মক স্ট্রিংয়ের দৈর্ঘ্যের জন্য বাশ ৪.২ যোগ করেছে:

http://tldp.org/LDP/abs/html/abs-guide.html#SUBSTREXTR01

উদাহরণ 37-12। স্ট্রিং-এক্সট্রাকশন কনস্ট্রাক্টে নেতিবাচক পরামিতি

যখন "দৈর্ঘ্য" পরামিতি নেতিবাচক হয়, এটি অফসেট-থেকে-শেষ প্যারামিটার হিসাবে কাজ করে।

উদাহরণস্বরূপ, উবুন্টুতে যখন পরীক্ষা করা হয় তখন নিম্নলিখিত ওয়ার্ডগুলি "ওয়ার্ল্ড" দেয়:

STR="Hello World!"
echo ${STR:6:-1}

তবে ওএস এক্স (জিএনইউ ব্যাশ, সংস্করণ 4.3.42 (1) -রিলিজ (x86_64-আপেল-ডারউইন ১৪.৫)), এই ব্যবহারটি নিম্নলিখিত ত্রুটিটি উত্পন্ন করে:

-1: substring expression < 0

এই ওএস এক্সটি নির্দিষ্ট, নাকি পরবর্তী ব্যাশ আপডেটে এটি আবার অক্ষম করা হয়েছিল? ওএস এক্সের জন্য এই কার্যকারিতাটি সক্ষম করার কোনও উপায় আছে কি?


1
tldp.org/LDP/abs/html/abs-guide.html#BASH2 - যখন v2, v3 এবং v4 দিয়ে শুরু হবে তখন কী যুক্ত করা হয়েছিল।
হান্নু

@ হান্নু হ্যাঁ, এই নথিতে বলা হয়েছে যে negativeণাত্মক দৈর্ঘ্যের শব্দার্থকগুলি সংস্করণ ৪.২
ব্রেন্ট ফাউস্ট

আমার একই সমস্যা আছে: আপনি কি এটির সাথে কোনও উপায় খুঁজে পেয়েছেন?
রোমেন জুইন

@romainjouin শুধু অ্যালগরিদম পরিবর্তন করে। এই সিনট্যাক্সটি কেবল ওএক্স এক্স এর অধীনে কাজ করে না, এমনকি বাশ সংস্করণ 4.3.46 হিসাবে! এই বিষয়ে আরও দৃষ্টি আকর্ষণ করার চেষ্টা করার জন্য প্রশ্নটি আপ-ভোট করুন। উত্তরটি কেউ জানে ...
ব্রেন্ট ফাউস্ট

1
@ রুবিস্ট্রো ঠিক এই হিট করুন: | এর চারপাশের একটি উপায় হ'ল (আপনার উদাহরণে)echo "Hello World" | rev | cut -c -5 | rev
donovanmuller

উত্তর:


7

ফ্ল্যাবডব্লেটসের সমাধান কেবল স্থির দৈর্ঘ্যের স্ট্রিংয়ের জন্যই কাজ করে আপনি এটিকে গতিশীল আকারের স্ট্রিংয়ের জন্য ড্রপ-ইন প্রতিস্থাপন হিসাবে ব্যবহার করতে পারেন:

echo ${STR:6:$((${#STR} - 6 - 1))}

বিস্তারিত:

  • ${#STR} স্ট্রিংয়ের দৈর্ঘ্য প্রদান করে।
  • $((a - b - c)) গাণিতিক বিয়োগফল করে
  • ${STR:start:len} একটি সাবস্ট্রিং প্রদান করে।

সুতরাং দ্বিতীয় আর্গুমেন্টটি স্ট্রিংং এক্সপ্রেশনটির সাথে একত্রিত করে স্ট্রিং বিয়োগের দৈর্ঘ্য হ'ল শুরু হওয়া অফসেট বিয়োগের মানটি আপনি নতুন ব্যাশ সিনট্যাক্সে নেতিবাচক মান হিসাবে উল্লেখ করবেন।


2

STR {এসটিআর::: $ {# এসটিআর 7 -7 যদি STR {এসটিআর: 6: -1 for এর স্থানে কাজ করা ড্রপ-ইন প্রতিস্থাপন হয় তবে যদি এসআরটি কমপক্ষে 7 টি অক্ষর ধারণ করে। যদি এটি আরও ছোট করা যায় তবে এটি ওএস এক্স ব্যাশকে নেতিবাচক দৈর্ঘ্যের বিষয়ে অভিযোগ করতে বা বাশ সংস্করণগুলিতে মারাত্মক ভুল হতে পারে যা নেতিবাচক দৈর্ঘ্যের সমর্থন করে যা ডান থেকে অফসেট হিসাবে নেওয়া হয়।


থেক্স, আমার জন্য কৌশলটি করেছিলেন
জিন-বার্নার্ড জানসেন

0

এখান থেকে গুগলড :

তারা বলে যে ${STR:6:$#-1}ভাল কাজ করা উচিত

আমার ক্ষেত্রে, একটি অনুরূপ ত্রুটি সহ ${VERSION::-2}, এটা শুধু কাজ ভালো 0 যোগ করার পরে শুরু: ${VERSION:0:-2}

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