使用动态定义的选择数组的对话框单选列表

使用动态定义的选择数组的对话框单选列表

跟随我的上一个问题,我编写了以下 MWE 来按日期创建一个简单的文件选择器

filesArr=( $(ls -1rt ??????????_?) )
nfiles=${#filesArr[@]}
iLastFile=$[nfiles-1]
choiceArr=( )
for i in `seq 0 $iLastFile`; do
    filesSN[i]=${filesArr[i]:11:1}
    year=${filesArr[i]:0:2}
    month=${filesArr[i]:2:2}
    day=${filesArr[i]:4:2}
    hour=${filesArr[i]:6:2}
    min=${filesArr[i]:8:2}
    wday=`date -d $month/$day/$year '+%a'`
    filesDate[i]="'$wday $day/$month/$year $hour:$min'"
    choiceArr=( ${choiceArr[@]} "'${filesSN[i]}'" "${filesDate[i]}" )
done

#choiceArr=( '4' 'Fri 23/01/15 10:09' '1' 'Mon 02/02/15 09:15' '3' 'Wed 25/03/15 11:38' '2' 'Sat 18/04/15 23:45' )
echo ${choiceArr[@]}

dialog --title "Backup target file"  \
--radiolist "Select the file to replace" 15 60 4 \
"${choiceArr[0]}" "${choiceArr[1]}" ON \
"${choiceArr[2]}" "${choiceArr[3]}" OFF \
"${choiceArr[4]}" "${choiceArr[5]}" OFF \
"${choiceArr[6]}" "${choiceArr[7]}" OFF 2>/tmp/menu.sh.$$

问题是这混合了广播列表中的选择

(*) '4'       'Fri
( ) 23/01/15  10:09'
( ) '1'       'Mon
( ) 02/02/15  09:15'

但是,如果我使用相同的 for 循环创建数组,将其打印在屏幕上,然后将其显式分配给同一变量(即取消注释注释行),则它可以正常工作。

有人有什么建议吗?

答案1

根据 @muru 的评论,通过将循环内的最后一行替换为 来解决问题choiceArr+=( "'${filesSN[i]}'" "${filesDate[i]}" )

相关内容