ব্রেস (ক্রমানুসারণ) এবং অ্যারে সম্প্রসারণ একই সাথে ব্যবহার করা সম্ভব?


12

বাশের {}ব্রেস এক্সপেনশন সিনট্যাক্স সহজে ক্রমবর্ধমান তৈরি করার অনুমতি দেয়

# echo {b,c,d}{a,e,i,o,u}
ba be bi bo bu ca ce ci co cu da de di do du

তবে এটা আমার কাছে পরিষ্কার করে / কিভাবে এটা সম্ভব খুব বিশ্রী ব্যবহারে ব্যতীত অ্যারে সাথে এই ব্যবহার করতে না $() echoএবংeval

কোঁকড়া ধনুর্বন্ধনী (ক্রমায়ন) সম্প্রসারণ সহ অ্যারেগুলি ব্যবহার করার কোনও সহজ উপায় আছে?

উদাহরণস্বরূপ, এমন কিছু কল্পনা করুন (যা অবশ্যই কার্যকর হয় না):

CONS=( b c d )
VOWEL=( a e i o u )

echo {${CONS[@]}}{${VOWEL[@]}}

এটি GNU bash, version 4.2.24 আউটপুটটিতে কাজ করছে root@router:~# echo {${CONS[@]}}{${VOWEL[@]}} {b c d}{a e i o u}.যদি আপনি আলাদা চান তবে আমাদের জানান .. `
রাহুল পাতিল

3
@ রাহুলপাতিল ওপি চায় ba be bi bo bu ca ce ci co cu da de di do du
টেরডন

উত্তর:


10

আপনি ইওল IFS=,; "${array[*]}"(যা কমা দিয়ে মানগুলিতে যোগদান করে) বা লুপের জন্য মাত্র দুটি ব্যবহার করতে পারেন:

$ CONS=(b c d);VOWEL=(a e i o u)
$ IFS=,;eval echo "{${CONS[*]}}{${VOWEL[*]}}"
ba be bi bo bu ca ce ci co cu da de di do du
$ for c in "${CONS[@]}";do for v in "${VOWEL[@]}";do echo "$c$v";done;done|paste -sd' ' -
ba be bi bo bu ca ce ci co cu da de di do du

9

এটি দিয়ে এটি সম্ভব zsh:

$ CONS=( b c d )
$ VOWEL=( a e i o u )
$ echo $^CONS$^VOWEL
ba be bi bo bu ca ce ci co cu da de di do du

বা es:

; VOWEL=( a e i o u )
; CONS=( b c d )
; echo $VOWEL^$CONS
ab ac ad eb ec ed ib ic id ob oc od ub uc ud

সঙ্গে bashবা ksh93তোমার মতোই সংবর্ত কিছু করতে হবে চাই:

VOWEL=( a e i o u )
CONS=( b c d )
qVOWEL=$(printf %q, "${VOWEL[@]}")
qCONS=$(printf %q, "${CONS[@]}")
eval "echo {${qVOWEL%,}}{${qCONS%,}}"

2
Zsh ব্যবহারের আরও একটি কারণ।
কেভিন

আপনি কি নিশ্চিত যে এটিকে বাশ করার সরাসরি কোনও উপায় নেই? অথবা আপনি কি সন্দেহ করেন যে এটি কি তাই?
ক্যাটসকুল

@ ক্যাটসকুল, না, আমি দৃ strongly়ভাবে সন্দেহ করি কিন্তু আমি নিশ্চিত নই, আমি ksh93 এর জন্য আরও কম নিশ্চিত যেখানে বেশ কয়েকটি বৈশিষ্ট্য নথিভুক্ত নয়। আপনি কিছুক্ষণের জন্য প্রশ্নটি খোলা রাখতে চাইতে পারেন। আমি নিশ্চিত যে আপনি অন্য স্তরের মূল্যায়ন ( evalবা এর সাথে .) বাদ দিয়ে ব্রেস প্রসার দিয়ে এটি করতে পারবেন না ।
স্টাফেন চেজেলাস

eval "echo {$(printf ',%s' "${CONS[@]}" "${VOWEL[@]}" | tail -c+2)}"(যদিও একক উপাদানের জন্য কাজ করছে না))
রক্যালাইট

2

মজা, কিন্তু সম্ভবত সেরা না।

temparr=( b{a,e,i,o,u} c{a,e,i,o,u} d{a,e,i,o,u} )
echo "${temparr[@]}"

সত্য, তবে স্বরগুলি পুনরাবৃত্তি করা দরকার, যা প্রশ্ন থেকে নিহিত নয় (প্রত্যেকে CONS এবং স্বরকে একটি স্ট্যাটিক তালিকা নির্ধারণ করে)।
জেফ শ্যাচলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.