Bash 如何使关联数组查找不区分大小写?

Bash 如何使关联数组查找不区分大小写?,bash,Bash,我有这样的代码: declare -A colortable=( ["bcbcbc"]="250" ["c6c6c6"]="251" ["d0d0d0"]="252" ["dadada"]="253" ["e4e4e4"]="254" ["eeeeee"]="255" ) # get colors from byobu config if [ -f ~/.config/byobu/color.tmux ]; then source ~/.

我有这样的代码:

declare -A colortable=(
    ["bcbcbc"]="250"
    ["c6c6c6"]="251"
    ["d0d0d0"]="252"
    ["dadada"]="253"
    ["e4e4e4"]="254"
    ["eeeeee"]="255"
)

# get colors from byobu config
if [ -f ~/.config/byobu/color.tmux ]; then
    source ~/.config/byobu/color.tmux
else
    BYOBU_DARK="\#bcbcbc"
fi

# cut the first two characters
BYOBUCOLOR="${BYOBU_DARK:2}";
#echo $BYOBUCOLOR

LOCALCOLOR="${colortable[$BYOBUCOLOR]}";

这很好,除非my
color.tmux
中的值是用大写字符而不是小写字符定义的。如何使查找不区分大小写?

在参数扩展期间,可以使用
${varname,,}
将变量转换为小写。因此,将执行查找的行更改为:

LOCALCOLOR="${colortable[${BYOBUCOLOR,,}]}"
…始终使用
BYOBUCOLOR
的小写版本进行查找



(顺便说一下,您可以考虑切换到小写变量名:所有的CAP名称都有可能与shell和POSIX指定的工具有冲突,就像在*/< /代码>中的<代码>如何打破运行其他命令的能力,但是< */< /代码>中的路径<代码>是安全的。参见POSIX规范的第四段这一点,请记住,即使未显式调用
export
,设置shell变量也会覆盖任何类似的命名环境变量)请注意,反斜杠只保证在单引号中作为文字存储;<代码> > \代码> >在双引号中是无效的,并且可以在释放之间进行行为改变……另一方面,考虑<代码>声明-VARNEX 或<代码> Prtff '%s'=%q\n′ValNex“$VALNEX”< /C> >而不是<代码>回声“$VALNEX”。当您想要明确确定变量包含的内容时。请参阅,将
250
作为输出,而不是空字符串。如果您在此处给出的代码实际上没有问题,则无法修复该问题。(另一方面,所有caps变量都由shell和POSIX实用程序使用,而至少带有一个小写字符的名称保留给应用程序使用,并保证不会更改shell的行为;请参阅第四段;阅读时注意,设置shell变量将自动覆盖任何环境变量。)t以相同的名称存在,没有显式的
导出
需要)…无论如何,我很怀疑这是一个bash版本的更改造成了不同--这两台机器中是否有一台有
~/.config/byobu/color.tmux
文件?