我想为用户创建一个菜单,以便使用对话框选择要查看的文件。文件名存储在名为“fileNames”的数组中。我想将它们作为参数发送到对话框命令,如下所示:
dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 <${fileNames[0]}> 2 <${fileNames[1]}> ...
答案 0 :(得分:1)
您应该寻找一个解决方案,该解决方案适用于包含特殊字符(空格,甚至是换行符)的文件名。您可以做的是构建一个包含所有必需字符串的辅助数组,如下所示:
declare -i i=0
declare -a arguments=()
for file in "${fileNames[@]}" ; do
arguments+=( $((++i)) "$file")
done
dialog --menu "Choose a file:" 20 50 "${arguments[@]}"
围绕"${arguments[@]}"
数组扩展的双引号可以防止在每个单独元素中发生单词拆分,并保证文件名中的空格和其他特殊(但有效)字符不会导致问题。
请注意,此代码假定fileNames
数组已存在且不为空。它还假设传递给dialog
命令的数字不是实际的数组索引,而是顺序并从1开始。如果这些不是正确的假设,请注释,我可以相应地更新解决方案。
答案 1 :(得分:0)
嗯,最简单的方法是使用${fileNames[@]}
。
dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 "${fileNames[@]}"
编辑:要在每个参数之间添加数字,我会使用for
循环;
line="dialog --menu \"Choose a file:\" 20 50 ${#fileNames[@]}"
for ((i=0;i<${#fileNames[@]};i++)); do
line="$line "$(($i + 1))
line="$line " "${FileNames[$i]}"
done
$line #This will run the completed line built above