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.