"$ {আমার_আরে [@] / # / -}" এ / # / - কী ধরণের অপারেশন?


17

একটি অ্যারেরকে একটি আদেশের যুক্তিতে রূপান্তরিত করার জন্য গৃহীত উত্তর ? নিম্নলিখিত বাশ কমান্ড ব্যবহার করে:

command "${my_array[@]/#/-}" "$1"

আমি /#/-অংশটি ঠিক কী করে তা বের করার চেষ্টা করছি । দুর্ভাগ্যক্রমে, আমি এটিকে কী বলব জানি না, তাই কোনও ডকুমেন্টেশন খুঁজে পেতে আমার সমস্যা হচ্ছে। আমি অ্যারে এবং কয়েকটি ওয়েবসাইটে বাশ ম্যান পৃষ্ঠা বিভাগটি দেখেছি, তবে কিছুই খুঁজে পাচ্ছি না।

উত্তর:


24

এটি শেল প্যারামিটার সম্প্রসারণে প্যাটার্ন প্রতিস্থাপনের একটি উদাহরণ : ${parameter/pattern/replacement}প্রসারিত হয় ${parameter}, এর patternসাথে প্রথম উদাহরণটি প্রতিস্থাপন করে replacement। এই ধরণের একটি প্যাটার্নের প্রসঙ্গে #বিশেষ: এটি প্যারামিটারের শুরুতে প্যাটার্নটি অ্যাঙ্কর করে। my_arrayএগুলির শেষ ফলাফল হ'ল অ্যারের সমস্ত মানগুলি প্রসারিত -করে প্রতিটি একের জন্য প্রস্তুত করে (প্রতিটি প্যারামিটারের শুরুতে খালি প্যাটার্নটি প্রতিস্থাপন করে)।


2

হ্যাঁ, এটি শেল প্যারামিটার সম্প্রসারণের এক ধরণের প্রতিস্থাপন এটি :

${parameter/pattern/replacement}

কিন্তু যদি প্রথম পর প্রথম অক্ষর /পারেন হয় /বা #বা %এটি বিশেষ অর্থ আছে all(পুনরাবৃত্তি), startএবং end

সঙ্গে:

$ str='one_#two_two_three_one'

একটি একক /প্রথম উদাহরণ প্রতিস্থাপন করবে। প্রথম উদাহরণ one:

$ echo "${str/one/x-x}"
x-x_#two_two_three_one

বা এর প্রথম উদাহরণ two:

$ echo "${str/two/x-x}"
one_#x-x_two_three_one

oneশেষের উদাহরণ :

$ echo "${str/%one/x-x}"
one_#two_two_three_x-x

সমস্ত পুনরাবৃত্তি two:

$ echo "${str//two/x-x}"
one_#x-x_x-x_three_one

oneশুরুতে উদাহরণ :

$ echo "${str/#one/x-x}"
x-x_#two_two_three_one

একটি স্ট্রিং যা দিয়ে শুরু #(উদ্ধৃতি #):

$ echo "${str/\#two/x-x}"
one_x-x_two_three_one

তবে আপনি যদি # (অব্যক্ত) একা ছেড়ে যান তবে প্রতিস্থাপনটি ভেরিয়েবলের শুরুতে সেট করা থাকে:

$ echo "${str/#/====}"
====one_#two_two_three_one

তদতিরিক্ত, যদি প্যারামিটারটি একটি অ্যারে হয় তবে প্রতিস্থাপনটি সমস্ত উপাদানগুলিতে করা হয়:

$ str=( one two three )
$ echo "${str[@]/#/==}"
==one ==two ==three

শব্দগুচ্ছটি কিছুটা বিভ্রান্তিমূলক #এবং %এটি প্যাটার্নের অংশ এবং একই ধরণের //থেকে ভিন্ন অপারেটর /এবং ব্যবহার করে। আপনার কাছে pattern='#x'; echo "${var/$pattern}"(বা ${var//$pattern}) থাকতে পারে তবে pattern=/x; echo "${var/$pattern}"একইরকম নয় echo "${var//x}"। লক্ষ্য করুন #এবং %সংমিশ্রণে যাবে zsh, কিন্তু না bashকিংবা ksh
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.