1

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 = "$opt2" ]で試してみまし たが、成功せず、[ $response = $opt2 ]では、リストから 1 つのオプションを選択した場合にのみ機能しますが、複数の選択肢を選択した場合、結果は空白になります。ファイル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

誰かがそれを修正する方法を知っていますか?

4

1 に答える 1

0

値が結果に含まれているかどうかのテストは、結果に値が含まれている場合にそれが見つかるためname-1、結果に含まれているかのようにプログラムが動作するため、責任があります。name-1-new$opt1

opt可能であれば、互いに間違えない名前を選択してください。それは簡単な「貧乏人の」アプローチですが、あなたには適しているかもしれません.

より良い方法は、値とともに区切り文字を検索することです。

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

など。いずれにせよ、デリミタがもちろん値の一部であってはならないことを確認してください。

于 2014-01-13T14:49:53.770 に答える