我试图给自己写一些方便的脚本,以便更有效地合法地放松工作,这个问题突然出现了:
给定一个很长的字符串$LONGEST_EVER_STRING
和几个关键字串像$A='foo bar'
,$B='omg bbq'
和$C='stack overflow'
我应该如何使用完全关键字匹配作为case
语句中的条件?
for word in $LONGEST_EVER_STRING; do
case $word in
any exact match in $A) do something ;;
any exact match in $B) do something ;;
any exact match in $C) do something ;;
*) do something else;;
esac
done
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样写,但看起来很难看:
for word in $LONGEST_EVER_STRING; do
if [[ -n $(echo $A | fgrep -w $word) ]]; then
do something;
elif [[ -n $(echo $B | fgrep -w $word) ]]; then
do something;
elif [[ -n $(echo $C | fgrep -w $word) ]]; then
do something;
else
do something else;
fi
done
Run Code Online (Sandbox Code Playgroud)
有没有人有优雅的解决方案?非常感谢!
您可以使用函数对 A、B、C 变量进行一些转换,然后:
shopt -s extglob
Ax="+(foo|bar)"
Bx="+(omg|bbq)"
Cx="+(stack|overflow)"
for word in $LONGEST_EVER_STRING; do
case $word in
$Ax) do something ;;
$Bx) do something ;;
$Cx) do something ;;
*) do something else;;
esac
done
Run Code Online (Sandbox Code Playgroud)