在我的脚本中,我创建了一个文件,我想将其用作对话框程序的输入源,以便填充菜单对话框。
在文件中,每一行都包含一个数字和一个菜单标题。
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命令(不使用脚本),则菜单会正确显示。
有什么想法吗?
答案 0 :(得分:4)
您可以使用数组来保留结果,然后使用正确的引号将其发送到dialog
:
ar=()
while read n s ; do
ar+=($n "$s")
done < result
dialog --menu "Latest news " 20 50 30 "${ar[@]}"
您可能根本不必创建临时文件,可以直接填充数组。
答案 1 :(得分:2)
问题是空间。设置IFS = $'\ n'并将结果文件中的值保存在单独的行中,如上所示。