Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Feb 2016 04:53:28 +1100 (EST)
From:      Ian Smith <smithi@nimnet.asn.au>
To:        Jan Henrik Sylvester <me@janh.de>
Cc:        Sergei G <sergeig.public@gmail.com>, freebsd-questions@freebsd.org
Subject:   Re: /bin/sh starts with check in script
Message-ID:  <20160213034617.D51785@sola.nimnet.asn.au>
In-Reply-To: <mailman.83.1455278401.97224.freebsd-questions@freebsd.org>
References:  <mailman.83.1455278401.97224.freebsd-questions@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In freebsd-questions Digest, Vol 610, Issue 5, Message: 1
On Thu, 11 Feb 2016 15:29:22 +0100 Jan Henrik Sylvester <me@janh.de> wrote:
 > On 02/10/2016 13:58, Sergei G wrote:
 > > I came up with this solution to check if variable $line starts with a
 > > hash.  Basically I am checking if line is a comment in the configuration
 > > file.
 > > 
 > > #!/bin/sh
 > > if expr "${line}" : '#.*' > /dev/null; then
 > >   echo Ignoring comment line
 > > fi

expr(1) suggests preferring sh(1) for maths expressions and parsing :)

 > > I had to redirect to /dev/null, because expr prints a number to STDOUT. 
 > > Is there a better way to do this kind of string matching check in
 > > /bin/sh (not bash)?
 > 
 > [ "${line#\#}" != "$line" ] && echo comment
 > 
 > See the Parameter Expansion section of sh(1).

That looks like it ought to work, but does not here on stable/9; I don't 
think it honours the escaping when expecting a second '#' or other char?

After some playing, this also finds comment lines that have optional 
whitespace before the first '#', not pinning comments only to column 1, 
while ignoring comments after other text.  Not what everybody needs ..

[ ! "`echo ${line%%#*} | tr -d [:blank:]`" ] && echo comment

BUG|FEATURE: if $line is the null string it is taken to be a comment.  

cheers, Ian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160213034617.D51785>