我想創建一個菜單供用戶選擇使用對話框查看哪個文件。文件名稱存儲在名爲'fileNames'的數組中。我想送他們作爲參數傳遞給對話框的命令是這樣的:如何在bash腳本中逐個傳遞數組中的所有值?
dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 <${fileNames[0]}> 2 <${fileNames[1]}> ...
我想創建一個菜單供用戶選擇使用對話框查看哪個文件。文件名稱存儲在名爲'fileNames'的數組中。我想送他們作爲參數傳遞給對話框的命令是這樣的:如何在bash腳本中逐個傳遞數組中的所有值?
dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 <${fileNames[0]}> 2 <${fileNames[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開始。如果這些不是正確的假設,請評論,我可以相應地更新解決方案。
好,最簡單的方法是使用${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
是的,但我需要在每個文件名之間添加數字 –
我的錯誤,一個時刻。 – Guest