这是我现在的代码 - 它找到所有具有该文件扩展名的文件 .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'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top