我的zenity列表有问题。问题是如果我选择例如 opt2 返回 opt1 和 opt2 作为结果。当我从终端运行命令时,结果是正确的。 这是我的剧本
#!/bin/bash
opt1=$(cat ~/test.txt | head -n 1 | tail -n 1)
opt2=$(cat ~/test.txt | head -n 2 | tail -n 1)
opt3=$(cat ~/test.txt | head -n 3 | tail -n 1)
response=$(zenity --list --width="350" --height="350" --text "Text" --checklist --column "Text" --column "Text" FALSE "$opt1" FALSE "$opt2" FALSE "$opt3" --separator=":")
(
[[ $response = *$opt1* ]] && echo "$opt1" >> file.txt
[[ $response = *$opt2* ]] && echo "$opt2" >> file.txt
[[ $response = *$opt3* ]] && echo "$opt3" >> file.txt
[[ $response = *$opt4* ]] && echo "$opt4" >> file.txt
[[ $response = *$opt5* ]] && echo "$opt5" >> file.txt
)
我也试过 [$ response =“$ opt2”] 但是没有成功且 [$ response = $ opt2] 只有在我从列表中选择一个选项时才有效,但如果我选择多个选项,则结果为空。 文件 test.txt 就是这样的
name-1
name-1-new
name-1-0-new
name-2
name-2-new
name-2-0-new
name-3
name-3-new
name-3-0-new
有谁知道我如何解决这个问题?
答案 0 :(得分:0)
您的测试值是否在结果中是值得责备的,因为如果您在包含name-1
的结果中搜索name-1-new
,您会找到它,因此您的程序将像{{{ 1}}在结果中。
如果可以,请选择那些不能互相误解的$opt1
的名称。这将是简单的“穷人”方法,但它可能适合你。
更好的方法是搜索分隔符和值:
opt
等。在任何情况下都要确保分隔符不能成为值的一部分。