POSIX এ পরোক্ষ চলক সম্প্রসারণ যেমন ব্যাশ হিসাবে করা হয়েছে?


11

এটি কি সম্ভব, বা বাশ-এ করা যেতে পারে এমন পসিক্সে পরোক্ষ চলক সম্প্রসারণ করার জন্য কিছু মার্জিত হ্যাক আছে কি?

প্রসঙ্গে, আমি নিম্নলিখিতগুলি করার চেষ্টা করছি:

for key in ${!map_*}
do
    # do something
done

সম্পাদনা: পরিষ্কার করার জন্য, আমি শেল ভেরিয়েবলগুলি দিয়ে শুরু করতে পারা যেতে চাই map_


5
পুনরায় খুলতে ভোট দিয়েছেন। প্রশ্নটি কীভাবে পরোক্ষভাবে পেতে হয়, ওয়াইল্ডকার্ডের সাথে মেলে এমন সমস্ত ভেরিয়েবল ( map_*)।
slm

আমি অবাক হয়েছি আমি আমার প্রশ্নের সাথে অস্পষ্ট ছিলাম: পি
ড্যাশড

4
দয়া করে আবার খুলুন। এটি shভিএস bash- এর একটি ক্ষেত্রে - stackoverflow.com/a/5725402/1172302 দেখুন
নিকোস আলেকজান্দ্রিস

সুতরাং কিছু লোকেরা স্ট্যাকওভারফ্লো এবং কিছু স্ট্যাকএক্সচেঞ্জ সাইট পছন্দ করে না।
ড্যাশড

উত্তর:


6

হ্যাকটি ব্যবহার করতে হবে eval:

aaa=1
aab=2
aac=3

eval_like() {
    pattern=$1
    vars=`set |grep "^$pattern.*=" | cut -f 1 -d '='`
    for v in $vars; do
        eval vval="\$$v"
        echo $vval
    done
}   

for i in `eval_like aa`; do
    echo $i
done

ধন্যবাদ! setআমি কি খুঁজছিলাম ছিল।
দশকে

এটি যদিও নির্বোধ নয় এবং এটি একটি স্বেচ্ছাসেবক কমান্ড ইঞ্জেকশন দুর্বলতা (যেমন এটি যখন কোনও পরিবেশে চালিত হয় তখন QUERYSTRING=$'\nmap_$(reboot)=x')। এছাড়াও সতর্কতা অবলম্বন করুন যে bashশেলটি আউটপুটে ফাংশনের তালিকা অন্তর্ভুক্ত করেছে set(যখন চলছে না sh)।
স্টাফেন চেজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.