hao*_*ike 3 string bash search list
我正在尝试使用bash来查找任何字符串"sets"中是否存在短字符串.例如,
FRUIT="apple banana kiwi melon"
VEGETABLE="radish lettuce potato"
COLOR="blue red yellow green brown"
MY_CHOICE="kiwi"
MY_CHOICE_GROUP="?"
Run Code Online (Sandbox Code Playgroud)
如何设置MY_CHOICE_GROUP到FRUIT?
我试图使用这个StackOverflow解决方案,但它只适用于单个字符串集.
最初,我使用数组来存储集合中的选项,但是考虑到 bash处理数组迭代的方式,字符串搜索似乎更有效.
非常感谢!
最简单的方法,即IMO,就是硬编码一堆case...esac标签.
#!/bin/bash
function lookup()
{
case "$1" in
apple|banana|kiwi|melon)
echo "FRUIT"
;;
radish|lettuce|potato)
echo "VEGETABLE"
;;
blue|red|yellow|green|brown)
echo "COLOR"
;;
esac
}
MY_CHOICE="kiwi"
MY_CHOICE_GROUP=$(lookup "$MY_CHOICE")
echo $MY_CHOICE: $MY_CHOICE_GROUP
Run Code Online (Sandbox Code Playgroud)
看到它住在ideone
否则,请考虑关联数组,在ideone上查看它:
#!/bin/bash
declare -A groups
groups["apple"]="FRUIT"
groups["banana"]="FRUIT"
groups["kiwi"]="FRUIT"
groups["melon"]="FRUIT"
groups["radish"]="VEGETABLE"
groups["lettuce"]="VEGETABLE"
groups["potato"]="VEGETABLE"
groups["blue"]="COLOR"
groups["red"]="COLOR"
groups["yellow"]="COLOR"
groups["green"]="COLOR"
groups["brown"]="COLOR"
MY_CHOICE="kiwi"
MY_CHOICE_GROUP=${groups[$MY_CHOICE]}
echo $MY_CHOICE: $MY_CHOICE_GROUP
Run Code Online (Sandbox Code Playgroud)