如何从Bash数组自动生成dialog菜单所需的索引值对字符串
实现方案
方案说明
我们通过构造独立的参数数组来生成dialog所需的索引值对,完全兼容带空格、特殊字符的数组元素,不会出现转义错误。
完整代码示例
# 1. 定义原始数组 declare -r -a arr=( piano table chair "带空格的示例项" ) # 2. 生成dialog菜单所需的索引值对参数数组 declare -a menu_params=() for index in "${!arr[@]}"; do # dialog菜单序号从1开始,所以把数组的0起始索引加1 display_idx=$((index + 1)) menu_params+=("$display_idx" "${arr[$index]}") done # 3. 调用dialog,直接传入生成好的参数数组 dialog_height=15 dialog_width=40 dialog \ --backtitle "Launcher" \ --title "App" \ --ok-label 'Select' \ --cancel-label "Back" \ --menu "Select an application" \ "$dialog_height" "$dialog_width" 4 \ "${menu_params[@]}"
单独输出索引值对字符串的方法
如果你需要单独导出题目要求格式的文本,可以使用以下代码:
for index in "${!arr[@]}"; do display_idx=$((index + 1)) # 不需要最后一行末尾反斜杠可加判断:最后一个元素不输出反斜杠即可 printf '"%d" "%s" \\\n' "$display_idx" "${arr[$index]}" done
输出结果示例:
"1" "piano" \ "2" "table" \ "3" "chair" \ "4" "带空格的示例项" \
内容的提问来源于stack exchange,提问作者user5507535
相关产品推荐
相关产品推荐

