Bash 如何在动态zenity放射科医生中仅将一个选择标记为真?

Bash 如何在动态zenity放射科医生中仅将一个选择标记为真?,bash,awk,zenity,Bash,Awk,Zenity,这是我目前拥有的代码-它查找所有具有文件扩展名.sv的文件,并在zenityradiolist中列出它们,但是,没有选择任何项目。当然,如果我将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

这是我目前拥有的代码-它查找所有具有文件扩展名
.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”。您还可以使用
basename
删除
cut
命令:

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'

如果是要处理的第一行,您可以修改
awk
命令以打印“TRUE”。您还可以使用
basename
删除
cut
命令:

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'

如果是要处理的第一行,您可以修改
awk
命令以打印“TRUE”。您还可以使用
basename
删除
cut
命令:

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'

如果是要处理的第一行,您可以修改
awk
命令以打印“TRUE”。您还可以使用
basename
删除
cut
命令:

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'