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

时间:2018-06-27 18:00:40

标签: 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 ~/.config/byobu/color.tmux
else
    BYOBU_DARK="\#bcbcbc"
fi

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

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

当我的color.tmux中的值用大写字符而不是小写字母定义时, 可以正常工作。如何使查找不区分大小写?

1 个答案:

答案 0 :(得分:0)

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

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

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


(顺便说一下,请考虑切换到小写的变量名:全大写字母的名称可能会与对Shell和POSIX指定的工具有意义的名称发生冲突,就像{{ 1}}破坏了运行其他命令的能力,但是for PATH in */是安全的。关于这一点,请参阅http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html上POSIX规范的第四段,请记住,设置shell变量会覆盖任何名称相同的变量环境变量,即使未显式调用for path in */