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]}";
这很好用,除非mycolor.tmux
中的值是用大写字符而不是小写字符定义的。如何使查找不区分大小写?
解决方案
您可以在参数扩展期间使用 将变量转换为小写${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
推荐阅读
- php - php: onClick 事件 - 表
- javascript - 调整画布大小而不放大元素 WEBGL
- java - 与“安全文件处理”相关的 SonarQube 错误
- android - 无法访问 includeAndroidResource 在 UnitTestOptions 中是私有的
- css - 换行符并
在 Microsoft Edge 上呈现为矩形框 - python-3.x - 如何将 Celery 异步结果转换为 Json 数据?
- c# - 从数据库访问数据的 MVC 问题:参数字典包含不可为空类型“System.Int32”的参数“id”的空条目
- neo4j - 如果 neo4j 密码中存在参数,您可以进行可选匹配吗?
- php - 计算重复数据并将其存储到变量中
- python - 如何启动忽略 PYTHONPATH 环境变量的 Jupyter Notebook