Search code examples
bashparameter-expansion

Extract substring before dot


I try to substract the first string before a dot (.) in bash.

For instance:

1.2.3 -> 1
11.4.1 -> 11

I used the following command based on the docs:

s=4.5.0
echo "${s%.*}"

But it ouptuts 4.5 instead of 4. I don't get it.

Why is that?


Solution

  • You need to use %% to remove the longest match from the end:

    $ echo "${s%%.*}"
    4
    

    From the docs:

    ${parameter%%word}
    Remove Largest Suffix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the largest portion of the suffix matched by the pattern deleted.