我尝试在bash中的dot
(.
)之前减去第一个字符串。
例如:
1.2.3 -> 1
11.4.1 -> 11
我使用了基于docs的以下命令:
s=4.5.0
echo "${s%.*}"
但它ouptuts 4.5
而不是4
。我不明白。
为什么?
答案 0 :(得分:8)
您需要使用%%
从最后删除最长匹配:
$ echo "${s%%.*}"
4
来自the docs:
${parameter%%word}
删除最大的后缀模式。应扩展字以产生图案。然后参数扩展将产生参数,后缀的最大部分与删除的模式匹配。
答案 1 :(得分:2)
您还可以使用最新版本的shell(自bash
)内置bash 3.0
Regular Expressions功能,使用代字号(=~
)运算符。
$ 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