আমি প্রথমবারের জন্য ব্যাশের সমাপ্তি লিখতে গিয়ে ছুরিকাঘাত করছি এবং ব্যাশ অ্যারে ( ${array[@]}
এবং ${array[*]}
) এর দুটি উপায় অবলম্বন করার বিষয়ে আমি কিছুটা বিভ্রান্ত হয়েছি ।
এখানে কোডের প্রাসঙ্গিক অংশটি রয়েছে (এটি কাজ করে, তবে আমি এটি আরও ভালভাবে বুঝতে চাই):
_switch()
{
local cur perls
local ROOT=${PERLBREW_ROOT:-$HOME/perl5/perlbrew}
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
perls=($ROOT/perls/perl-*)
# remove all but the final part of the name
perls=(${perls[*]##*/})
COMPREPLY=( $( compgen -W "${perls[*]} /usr/bin/perl" -- ${cur} ) )
}
বাশের ডকুমেন্টেশন বলে :
অ্যারের কোনও উপাদান $ {নাম [সাবস্ক্রিপ্ট] using ব্যবহার করে রেফারেন্স করা যেতে পারে} শেলের ফাইল নাম সম্প্রসারণ অপারেটরগুলির সাথে দ্বন্দ্ব এড়াতে ধনুর্বন্ধনী প্রয়োজন সাবস্ক্রিপ্ট যদি '@' বা '*' হয় তবে শব্দটি অ্যারের নামের সমস্ত সদস্যের কাছে প্রসারিত হয়। এই সাবস্ক্রিপ্টগুলি কেবল তখনই পৃথক হয় যখন শব্দটি ডাবল কোটের মধ্যে উপস্থিত হয়। যদি শব্দটি ডাবল-কোট করা থাকে তবে $ {নাম [*] আইএফএস ভেরিয়েবলের প্রথম অক্ষর দ্বারা পৃথক পৃথক প্রতিটি অ্যারে সদস্যের মান সহ একটি শব্দে প্রসারিত হয় এবং $ {নাম [@] name নামের প্রতিটি উপাদানকে প্রসারিত করে একটি পৃথক শব্দ।
এখন আমি মনে করি আমি বুঝতে পারি যে compgen -W
সম্ভাব্য বিকল্পগুলির একটি ওয়ার্ডলিস্টযুক্ত একটি স্ট্রিং প্রত্যাশা করে, তবে এই প্রসঙ্গে আমি "{{নাম [@] name নামের প্রতিটি উপাদানকে পৃথক শব্দের" মানে কী বোঝায় তা বুঝতে পারি না।
দীর্ঘ গল্প সংক্ষিপ্ত: ${array[*]}
কাজ; ${array[@]}
না আমি কেন জানতে চাই এবং আমি ঠিক কী ${array[@]}
প্রসারিত হবে তা আরও ভালভাবে বুঝতে চাই ।