Hello Andreas,

Got the point, thanks a lot for your feedback.

Cheers

On 26/12/2020 16:04, Andreas Kusalananda Kähäri wrote:
On Sat, Dec 26, 2020 at 01:29:58PM +0100, Alessandro De Laurenzis wrote:
Greetings,

While extracting the first two characters from a string I noticed the
following:

$ str="-- foo bar blahblahblah"
$ echo "First 2 chars: ${str%${str#??}}"
First 2 chars: --
$ str="-- foo bar blahblahblah [foo]"
$ echo "First 2 chars: ${str%${str#??}}"
First 2 chars: -- foo bar blahblahblah [foo]
$

It seems that the presence of '[' and ']' is somehow disturbing the
substitution...

Quite similar behavior in bash (the only difference is that the substitution
works there when no chars are present in between the square brackets).

Is this expected?

The main issue with your code is that you need to quote the pattern to
have it be interpeted as a string an not as a shell globbing pattern:

     ${str%"${str#??}"}

You may also want to use printf to output variable data (it doesn't
matter in this particular case though, but would matter with bash with
the xpg_echo shell option set, if the two characters happens to be
something like \n or \t).

     printf 'First 2 chars: %s\n' "${str%"${str#??}"}"


--
Alessandro De Laurenzis
[mailto:jus...@atlantide.mooo.com]
Web: http://www.atlantide.mooo.com
LinkedIn: http://it.linkedin.com/in/delaurenzis

Reply via email to