sie*_*ery 1 bash regular-expression case
我想检查一个 shell 脚本的参数是否是一个整数(即一个非负整数:0, 1, 2, 3, ..., 17, ..., 42, ... 等,但不是 3.1416 或 ?5 ) 以十进制表示(所以不像 0x11 或 0x2A)。如何使用正则表达式作为条件(匹配数字)编写 case 语句?我尝试了几种不同的方法(例如,[0-9]+
或^[0-9][0-9]*$
);它们都不起作用。就像在下面的示例中一样,有效数字通过旨在捕获它们并与*
通配符匹配的数字正则表达式 。
i=1
let arg_n=$#+1
while (( $i < $arg_n )); do
case ${!i} in
[0-9]+)
n=${!i}
;;
*)
echo 'Invalid argument!'
;;
esac
let i=$i+1
done
Run Code Online (Sandbox Code Playgroud)
输出:
i=1
let arg_n=$#+1
while (( $i < $arg_n )); do
case ${!i} in
[0-9]+)
n=${!i}
;;
*)
echo 'Invalid argument!'
;;
esac
let i=$i+1
done
Run Code Online (Sandbox Code Playgroud)
对于“1 位或更多位数字”,请执行以下操作:
shopt -s extglob
...
case ${!i} in
+([[:digit:]]) )
n=${!i}
;;
...
Run Code Online (Sandbox Code Playgroud)
如果要使用正则表达式,请使用内的=~
运算符[[...]]
if [[ ${!i} =~ ^[[:digit:]]+$ ]]; then
n=${!i}
else
echo "Invalid"
fi
Run Code Online (Sandbox Code Playgroud)