3

在我的脚本中,我创建了一个文件,我想将其用作对话框程序的输入源,以填充菜单对话框。

在文件中,每一行都包含一个数字和一个菜单标题。

INPUT=""
rm result
while read LINE
do
        case $LINE in
            '/ >'*|---*|'/ > '*)
                  continue;;
            esac
#       echo "1 $LINE "
                echo -n " 1  \"$LINE\"" >>result
done < tmpfile
#printf "%s " $INPUT
DIALOG  --menu "Latest news " 20 50 30 `cat result`

DIALOG 是一个函数,这是源代码:

DIALOG () {
        dialog --backtitle "$TITLE" "$@"
        return $?
}

对话框的每个菜单项都需要一个标识符(在我的示例中是数字)和一个标签(在双引号之间,如果它超过一个单词)。

问题是即使文件内容具有正确的格式:

1 "item number 1" 2 "item number 2" ...

对话框命令不将 \" 识别为标签分隔符,但它认为它是字符串的一部分,导致菜单混乱,每个单词都有一个菜单声音。

但是如果我尝试将相同的文件内容直接复制并粘贴到 shell 命令中(不使用脚本),菜单就会正确显示。

任何的想法?

4

2 回答 2

4

您可以使用数组来保留结果,然后使用正确的引用将其发送到dialog

ar=()
while read n s ; do
    ar+=($n "$s")
done < result
dialog  --menu "Latest news " 20 50 30 "${ar[@]}"

您可能根本不需要创建临时文件,您可以直接填充数组。

于 2012-05-24T22:50:34.733 回答
2

问题是空间。设置 IFS=$'\n' 并将结果文件中的值保留在上面建议的单独行中。

于 2017-04-27T12:48:28.700 回答