从中选择选项时返回不正确的结果



我对zenity列表有问题。问题是,如果我选择例如 opt2 返回我 opt1opt2 作为结果。当我从终端运行命令时,结果是正确的。这是我的脚本

#!/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 = "$opt 2" ]但没有成功并且 [ $response = $opt 2 ] 仅在我从列表中选择一个选项时才有效,但如果我选择多个选项,结果为空白。文件测试.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

有谁知道我如何解决这个问题?

你的测试结果中是否有值是罪魁祸首,因为如果你在包含name-1-new的结果中搜索name-1,你会找到它,所以你的程序将表现得好像$opt1在结果中一样。

如果可以,请为那些不会相互混淆的opt选择名称。 这将是简单的"穷人"方法,但它可能适合你。

更好的方法是搜索分隔符以及值:

[[ :$response: = *:$opt1:* ]] && echo "$opt1" >> file.txt

等。 无论如何,请确保分隔符当然不能成为值的一部分。

相关内容

  • 没有找到相关文章

最新更新