我尝试在 bash中减去dot
( ) 之前的第一个字符串。.
例如:
1.2.3 -> 1
11.4.1 -> 11
我根据文档使用了以下命令:
s=4.5.0
echo "${s%.*}"
但它输出4.5
而不是4
. 我不明白。
这是为什么?
我尝试在 bash中减去dot
( ) 之前的第一个字符串。.
例如:
1.2.3 -> 1
11.4.1 -> 11
我根据文档使用了以下命令:
s=4.5.0
echo "${s%.*}"
但它输出4.5
而不是4
. 我不明白。
这是为什么?
您需要使用从末尾%%
删除最长的匹配:
$ echo "${s%%.*}"
4
从文档:
${parameter%%word}
删除最大后缀模式。这个词应该被扩展以产生一个模式。然后参数扩展将产生参数,其中与模式匹配的后缀的最大部分被删除。
您还可以使用tilde( ) 运算符,使用最新版本的 shell (since ) 中内置的bash
正则表达式功能。bash 3.0
=~
$ string="s=4.5.0"
$ [[ $string =~ =([[:alnum:]]+).(.*) ]] && printf "%s\n" "${BASH_REMATCH[1]}"
4
$ string="s=32.5.0"
$ [[ $string =~ =([[:alnum:]]+).(.*) ]] && printf "%s\n" "${BASH_REMATCH[1]}"
32