2017-03-04 42 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