sie*_*z0r 21 bash pattern-matching switch-statement
我正在尝试编写一个Bash脚本,该脚本在case语句中使用变量作为模式.但是我无法让它发挥作用.
案例陈述:
case "$1" in
$test)
echo "matched"
;;
*)
echo "didn't match"
;;
esac
Run Code Online (Sandbox Code Playgroud)
我已经试过分配此$test
为aaa|bbb|ccc
,(aaa|bbb|ccc)
,[aaa,bbb,ccc]
和其他几个组合.我也尝试了这些作为case语句的模式:@($test)
,@($(echo $test))
,$($test)
.也没有成功.
编辑
为清楚起见,我希望变量代表多个这样的模式:
case "$1" in
aaa|bbb|ccc)
echo "matched"
;;
*)
echo "didn't match"
;;
esac
Run Code Online (Sandbox Code Playgroud)
cho*_*oba 21
您可以使用以下extglob
选项:
#! /bin/bash
shopt -s extglob # enables pattern lists like +(...|...)
test='+(aaa|bbb|ccc)'
for x in aaa bbb ccc ddd ; do
echo -n "$x "
case "$x" in
$test) echo Matches.
;;
*) echo Does not match.
esac
done
Run Code Online (Sandbox Code Playgroud)