gpt4 book ai didi

bash - 将包含空格的数组元素传递给 Zenity 窗口

转载 作者:行者123 更新时间:2023-12-05 05:21:26 29 4
gpt4 key购买 nike

我正在尝试构建一个 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( )    | WordPressCurrent 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com