Nic*_*etz 2 bash regular-expression
我正在尝试检查我运行的脚本的文件名是否以数字结尾:
#!/bin/sh
name=$(basename "$0" .sh)
[ $name =~ ^.[0-9]$ ] && numb=$(echo $name | sed 's/[^0-9]*//g') || numb=1
echo $numb
Run Code Online (Sandbox Code Playgroud)
我的 shell 文件被命名mh03.sh
,如果我运行它,这是输出:
$ ./mh3.sh
./mh3.sh: 3: [: mh3: unexpected operator
1
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么会出现此异常以及如何修复它吗?
单方=~
括号不支持正则表达式匹配运算符。你需要双方括号才能工作。
[[ $name =~ ^.[0-9]$ ]]
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要正则表达式,您可以使用普通模式:
[[ $name = *[0-9] ]]
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要名称在数字之前包含某些内容,
[[ $name = *?[0-9] ]]
Run Code Online (Sandbox Code Playgroud)