Date: Sat, 08 Aug 2009 11:41:58 -0700 From: Doug Barton <dougb@FreeBSD.org> To: rea-fbsd@codelabs.ru Cc: freebsd-hackers@freebsd.org Subject: Re: Problem in bin/sh stripping the * character through ${expansion%} Message-ID: <4A7DC6F6.4010802@FreeBSD.org> In-Reply-To: <ruze2YSbnZSTRbUbUJTTZyWDlyA@PR865FKBRXbdFBYZMkH1tmebpCc> References: <4A7B1DB0.1040602@FreeBSD.org> <ruze2YSbnZSTRbUbUJTTZyWDlyA@PR865FKBRXbdFBYZMkH1tmebpCc>
next in thread | previous in thread | raw e-mail | index | archive | help
Eygene Ryabinkin wrote: > Doug, good day. > > Thu, Aug 06, 2009 at 11:15:12AM -0700, Doug Barton wrote: >> I came across this problem during a recent portmaster update. When >> trying to strip off the * character using variable expansion in bin/sh >> it doesn't work. Other "special" characters do work if they are >> properly escaped. >> >> The attached mini-script clearly shows the problem: >> >> $ sh sh-strip-problem >> var before stripping: foo\* >> var after stripping: foo\* >> >> var before stripping: foo\$ >> var after stripping: foo\ > > According to the sh(1), it is not a problem. Namely, > - \* being unquoted at all will produce a lone '*'; Bzzzt! :) Backslash A backslash preserves the literal meaning of the following char- acter, with the exception of the newline character (`\n'). A backslash preceding a newline is treated as a line continuation. > - '*' when treated as the smallest pattern, will result in a stripping > of a zero-length string -- it is the smallest pattern in the case of > '*' that matches anything. I agree with you if I had done ${var%*}, but the backslash should be preventing the * from being interpreted as part of the variable expansion. > In order to strip the trailing star you should use > ----- > var=${var%[*]} > ----- > This gives you the pattern of '[*]' that is properly treated as the > single star -- it's a weird way to escape the star in the patterns. That's creative, and better than the kludge I worked up for portmaster, thanks. > I will try to look at the XCU to understand what is the POSIX > way of doing the things. Great, thanks. Doug -- This .signature sanitized for your protection
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A7DC6F6.4010802>