আমি একটি ডিরেক্টরিতে সাব ডিরেক্টরি ডিরেক্টরিতে কাজ করতে চাই। বিবেচনা:
for x in x86-headers/*/C/populate.sh; do echo $x; done
এই দেয়
x86-headers/elf/C/populate.sh
x86-headers/gl/C/populate.sh
x86-headers/gmp/C/populate.sh
x86-headers/gnome2/C/populate.sh
x86-headers/gtk2/C/populate.sh
x86-headers/jni/C/populate.sh
x86-headers/libc/C/populate.sh
কিন্তু আমি মান পথের দ্বিতীয় অংশ অনুরূপ, চাই
elf
, gl
ইত্যাদি আমি জানি বন্ধ স্ট্রিপ কিভাবে নেতৃস্থানীয় x86-headers
।
for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done
যা দেয়
elf/C/populate.sh
gl/C/populate.sh
gmp/C/populate.sh
gnome2/C/populate.sh
gtk2/C/populate.sh
jni/C/populate.sh
libc/C/populate.sh
আমি পরে কীভাবে শর্তগুলি সরিয়ে ফেলা যায় তাও জানি। অর্থাৎ এক স্তর নীচে যাচ্ছে:
cd x86-headers
for x in */C/populate.sh; do i=${x%%/*}; echo $i; done
দেয়
elf
gl
gmp
gnome2
gtk2
jni
libc
তবে, এগুলিকে একত্রিত করার চেষ্টা করা কার্যকর নয়। অর্থাত
for x in x86-headers/*/C/populate.sh; do i=${${x##x86-headers}%%/*}; echo $i; done
দেয়
bash: ${${x##x86-headers}%%/*}: bad substitution
সন্দেহ নেই যে এটি ভুল বাক্য গঠন, তবে আমি সঠিক বাক্য গঠন জানি না। অবশ্যই এটি করার আরও ভাল উপায় থাকতে পারে। যদি আমি পাইথন ব্যবহার করতাম, তবে /
প্রতিটি পাথকে তালিকায় ভাঙতে আমি বিভাজনটি ব্যবহার করতাম এবং তারপরে দ্বিতীয় উপাদানটি বাছাই করতাম, তবে কীভাবে বাশ করতে হয় তা আমি জানি না।
সম্পাদনা: উত্তরের জন্য ধন্যবাদ। আমারও জিজ্ঞাসা করা উচিত ছিল, এই বহনযোগ্যভাবে করা সম্ভব, এবং যদি তাই হয়, কিভাবে?
i=${x#*/}; i=${i%%/*}
চ্ছিক, তাই না?