【问题标题】:Array as a parameter of a dialog function in bash数组作为bash中对话框函数的参数
【发布时间】:2023-04-10 00:38:01
【问题描述】:
#!/bin/bash

function dialog_menu()
{

    arr["$4"]="$(dialog --clear --backtitle "Archlinux Installer" --title "$1" --menu $2 10 60 5 $3 --output-fd 1)"

}

ARRAY[0]="\"sda\""
ARRAY[1]="\"The main disk\""

dialog_menu "Disk Selection" "Please, choose where to install Archlinux" "$(echo ${ARRAY[*]})" DISK_SELECTION

echo "${arr[DISK_SELECTION]}"

这里的挑战是让 dialog --menu 读取我的数组。但由于某种原因,我找不到让它工作的方法。

编辑 1:

我尝试将数组更改为 array=('sda' 'super cool' 'sdb' 'less cool') 并且函数外部的替换适用于 "${array[@]}" 。但是一旦它在函数中,它就不再起作用了。

【问题讨论】:

  • 我建议你将dialog_menu的第三个参数($3)设为DISK_SELECTION,那么$4以上的所有参数都是ARRAY的内容。所以,dialog_menu "Disk selection" "Please..." DISK_SELECTION "${ARRAY[@]}"。我还想建议您将变量名称小写(即array 而不是ARRAY 或任何其他小写名称),因为按照惯例,环境变量和内部shell 变量完全大写。由于变量名区分大小写,因此此约定可避免意外覆盖环境变量和内部变量。
  • Arguments 是您进一步阅读和学习的绝佳来源:-)

标签: arrays bash function parameters dialog


【解决方案1】:
#!/bin/bash

array=(
    'sda' 
    'super cool' 
    'sdb' 
    'less cool'
    'sdc'
    'there is another ?'
)

function dialog_menu()
{

    arr["$1"]="$(dialog --clear \
            --backtitle "$2" \
            --title "$3" \
            --menu "$4" 10 60 3 \
            "${!5}" --output-fd 1)"

}

dialog_menu disk_selection "Menu" "Menu Test" "This is a test for Menu entry" array[@]

诀窍是使用${!5} 作为dialog_menu 函数的变量,然后使用array[@] 正常调用数组

N.B : 稍微修改了代码以确保更好的阅读

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多