2017-03-04 34 views

回答

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开始。如果这些不是正确的假设,请评论,我可以相应地更新解决方案。

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 
+0

是的,但我需要在每个文件名之间添加数字 –

+0

我的错误,一个时刻。 – Guest

相关问题