كيف يمكنني وضع علامة على تحديد واحد فقط على أنه TRUE في قائمة راديو zenity الديناميكية؟
سؤال
هذا هو الكود الموجود لدي حاليًا - فهو يعثر على جميع الملفات التي لها امتداد الملف .sv
ويسردها في أ zenity
radiolist، ومع ذلك، لم يتم تحديد أي من العناصر.بالطبع، إذا قمت بالتغيير awk '{print "FALSE\n"$0}'
ل awk '{print "TRUE\n"$0}'
سيتم اختيارهم جميعًا، وهو ما لا أريده.
test_name=$(
find ../tests/ -name '*.sv' |
awk '{print "FALSE\n"$0}' |
cut -d "/" -f3 |
cut -d "." -f1 |
zenity --list \
--radiolist \
--title "Select test" \
--text "Tests..." \
--column "Box" \
--column "Files"
) #select test via zenity
كيف يمكنني تحديد العنصر الأول فقط والباقي لا؟أعلم أنه يمكن القيام بذلك باستخدام المصفوفات، كما اقترح هذا سؤال/إجابة، إلا أنها تتطلب المزيد من التعليمات البرمجية بشكل ملحوظ.هل هناك طريقة أكثر أناقة لتحقيق ذلك؟
المحلول
يمكنك تعديل الخاص بك awk
أمر لطباعة "TRUE" إذا كان هذا هو السطر الأول الذي سيتم معالجته.يمكنك أيضًا إزالة cut
الأوامر باستخدام basename
:
test_name=$(
find ../tests/ -name '*.sv' -exec basename {} .sv \; |
awk 'NR==1{print "TRUE\n"$0} NR>1{print "FALSE\n"$0}' |
zenity --list \
--radiolist \
--title "Select test" \
--text "Tests..." \
--column "Box" \
--column "Files"
) #select test via zenity
يمكنك أيضًا استخدام sed
بدلا من `awk:
sed -e '1iTRUE' -e '1!iFALSE'
لا تنتمي إلى StackOverflow