检查字符串是否以数字结尾抛出“意外的运算符”

检查字符串是否以数字结尾抛出“意外的运算符”

我试图检查我运行的脚本的文件名是否以数字结尾:

#!/bin/sh
name=$(basename "$0" .sh)
[ $name =~ ^.[0-9]$ ] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $numb

我的 shell 文件已命名mh03.sh,这是运行它时的输出:

$ ./mh3.sh
./mh3.sh: 3: [: mh3: unexpected operator
1

有人可以告诉我为什么会出现此异常以及如何修复它吗?

答案1

=~单方括号中不支持正则表达式匹配运算符。您需要双方括号才能使其工作。

[[ $name =~ ^.[0-9]$ ]]

请注意,您不需要正则表达式,可以使用普通模式:

[[ $name = *[0-9] ]]

或者,如果您需要名称在数字之前包含某些内容,

[[ $name = *?[0-9] ]]

答案2

[:=~:需要二元运算符

错误是[$name =~ ^.[0-9]$ ] 用 [] 括起来,

尝试,

#!/bin/sh
name=$(basename "$0" .sh)
[[ $name =~ ^.[0-9]$ ]] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $num

它有效。

相关内容