首页 > 解决方案 > 如何使关联数组查找不区分大小写?

问题描述

我有这样的代码:

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]}";

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

标签: bash

解决方案


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

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

...始终使用小写版本的BYOBUCOLOR进行查找。


(顺便说一句,尽可能考虑切换到小写变量名称:全大写名称可能与对 shell 和 POSIX 指定工具有意义的名称发生冲突——就像如何for PATH in */破坏运行其他命令的能力一样,但是安全的。关于这一点,请参阅http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.htmlfor path in */的 POSIX 规范的第四段,请记住,设置 shell 变量会覆盖任何类似命名的环境变量即使没有明确调用)。export


推荐阅读