对话框单选列表中的变量

对话框单选列表中的变量

我有以下对话框广播列表,效果很好。

#!/bin/bash

ch1a="1"
ch1b="Fri, 20/3/15"
ch2a="2"
ch2b="Sun, 21/6/15"
ch1="\"$ch1a\" \"$ch1b\""

dialog --title "Equinoxes and Solistices"  \
--radiolist "When is the Winter Solictice?" 15 60 4 \
"$ch1a" "$ch1b" ON \
"$ch2a" "$ch2b" OFF \
"3" "Wed, 23/9/15" OFF \
'4' 'Mon, 21/12/15' OFF 2>/tmp/menu.sh.$$

"$ch1"但是,如果我用或替换第一个选择"${ch1[@]}",即使 的定义不同ch1,我也不会得到任何结果。

我的最终目标是创建一个动态广播列表,其中包含的所有选择都是字符串或数组。我已经尝试过了这个解决方案,但当选项包含空格时它不起作用。

答案1

需要--radiolist两个变量,而不是一个。正如中所解释的man dialog

--radiolist text height width list-height  [ tag item status ] ...
      A  radiolist  box is similar to a menu box.  The only difference is
      that you can indicate which entry is currently selected, by setting 
      its status to on.

正如您在上面看到的,它需要两个标签项目,以及状态。这就是为什么当你只给它一个时它会失败(即使那个被扩展为一个数组)。

您仍然可以使用数组,但需要执行以下操作:

#!/bin/bash

ch=( "1" "Fri, 20/3/15" "2" "Sun, 21/6/15" "3" "Wed, 23/9/15" 
     "4" "Mon, 21/12/15")

dialog --title "Equinoxes and Solistices"  \
--radiolist "When is the Winter Solictice?" 15 60 4 \
"${ch[0]}" "${ch[1]}" ON \
"${ch[2]}" "${ch[3]}" OFF \
"${ch[4]}" "${ch[5]}" OFF \
"${ch[6]}" "${ch[7]}" OFF 2>/tmp/menu.sh.$$

答案2

我一直在研究一个稍微有点扭曲的案例。

正如 Theo 上面所问的,我处于循环自动填充选项的情况。外壳转义空间可能很棘手,所以这就是我所做的。

local LIST=()                                                                                                                                                                                                                                
for item in *.sh; do
  local DESC="$( grep "DESCRIPTION=" $item | sed 's|^DESCRIPTION=||' )"
  LIST+=( $( basename $item .sh ) "$DESC" off )
done
local script
script=$( dialog --backtitle "NextCloudPi configuration" \
                 --radiolist "Select program to configure and activate:" 20 80 10 \
                 "${LIST[@]}" \
          3>&1 1>&2 2>&3 )
echo "$script was selected"

$DESC是一个通常包含空格的 shell 变量,这就是使此示例变得复杂的原因。我如何让 dialog 区分 中的空格$DESC和分隔其参数的空格?

我决定使用数组,因为无论如何它们是避免此类问题的更自然的方法。

您可以看到完整的代码和结果

https://ownyourbits.com/2017/03/05/generic-software-installer-for-raspbian/

有关数组与空间分割的更多信息,请参见

http://zsh.sourceforge.net/FAQ/zshfaq03.html

相关内容