我正在尝试构建一个 bash 脚本,该脚本在执行时从特定路径获取所有目录 并将它们显示在 Zenity 列表窗口中。在该窗口中,用户通过单选按钮选择目录名称并提交他的选择。
首先,这是我的 bash 脚本:
projectTypes=(~/application1/Snippets/Project\ Type/*/)
radioStates=()
for index in "${!projectTypes[@]}"; do
if [[ "$index" = "0" ]]; then
folderName=$(basename "${projectTypes[$index]}")
projectTypes[$index]="$folderName"
radioStates[$index]=TRUE
else
folderName=$(basename "${projectTypes[$index]}")
projectTypes[$index]="$folderName"
radioStates[$index]=FALSE
fi
done
PROJTYPE=$( zenity \
--list --radiolist \
--title="Project Type" --text="Please select project type:" \
--column="Select" --column="Project Type" \
$( \
for index in "${!projectTypes[@]}"; do
printf "%s %s " "${radioStates[$index]}" "${projectTypes[$index]}"
done
) \
)
所以我正在尝试检索在“项目类型”文件夹中找到的所有目录 的名称。在“项目类型”文件夹中,我有以下目录:
~/application1/Snippets/Project Type/Angular 2/ ~/application1/Snippets/Project Type/PrestaShop/ ~/application1/Snippets/Project Type/WordPress/
现在我设法将目录的名称正确地命名为 “Angular 2”、“PrestaShop” 和 “WordPress” 但我不能正确地将它们输出到 Zenity 列表窗口。
Expected Output: SELECT | PROJECT TYPE --------------------- (*) | Angular 2 ( ) | PrestaShop ( ) | WordPress Current erroneous output: SELECT | PROJECT TYPE --------------------- (*) | Angular ( ) | FALSE ( ) | FALSE ( ) |
Current erroneous output - Screenshot
我可以假设问题是我尝试扩展数组元素的方式,但经过数小时的研究和反复试验,我无法确定我应该如何做。
无论如何,我非常感谢任何帮助!
干杯!
最佳答案
解决问题
问题是 zenity
需要参数 zenity ... "Angular 2"...
但是读取 zenity ... "Angular""2 “
。为了避免这种情况,我们可以创建一个数组来保存 zenity
的参数并以安全的方式扩展它:
# ...
argList=()
for (( i = 0; i < "${#projectTypes[@]}"; ++i )); do
argList[2*i]="${radioStates[i]}"
argList[2*i + 1]="${projectTypes[i]}"
done
PROJTYPE=$( zenity \
--list --radiolist \
--title="Project Type" --text="Please select project type:" \
--column="Select" --column="Project Type" \
"${argList[@]}" \
)
改进现有代码
由于您只想将第一个条目设置为 true,因此可以省略数组 radioStates
并编写
argList=()
for (( i = 0; i < "${#projectTypes[@]}"; ++i )); do
argList[2*i]=FALSE
argList[2*i + 1]="${projectTypes[i]}"
argList[0]=TRUE
done
argList[0]=TRUE
位于循环内,以确保如果 projectTypes
为空,则 argList
保持为空。我们将分配多次,但作为返回保存了一个 if 语句。
关于bash - 将包含空格的数组元素传递给 Zenity 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867630/