Date: Mon, 10 Jun 2013 14:16:50 -0500 From: Tim Daneliuk <tundra@tundraware.com> To: dteske@freebsd.org Cc: freebsd-questions@freebsd.org Subject: Re: Bourne shell "if" syntax Message-ID: <51B62622.1070201@tundraware.com> In-Reply-To: <121b01ce660e$2abae5f0$8030b1d0$@freebsd.org> References: <51b620a6.42f.2b6a6400.5605dcf0@go2france.com> <121701ce660c$9a9aa5b0$cfcff110$@freebsd.org> <51B62389.5000500@tundraware.com> <121b01ce660e$2abae5f0$8030b1d0$@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 06/10/2013 02:10 PM, dteske@freebsd.org wrote: > > >> -----Original Message----- >> From: owner-freebsd-questions@freebsd.org [mailto:owner-freebsd- >> questions@freebsd.org] On Behalf Of Tim Daneliuk >> Sent: Monday, June 10, 2013 12:06 PM >> To: freebsd-questions@freebsd.org >> Subject: Re: Bourne shell "if" syntax >> >> On 06/10/2013 01:59 PM, dteske@freebsd.org wrote: >>> >>> >>>> -----Original Message----- >>>> From: owner-freebsd-questions@freebsd.org [mailto:owner-freebsd- >>>> questions@freebsd.org] On Behalf Of lconrad@go2france.com >>>> Sent: Monday, June 10, 2013 11:53 AM >>>> To: freebsd-questions@freebsd.org >>>> Subject: Bourne shell "if" syntax >>>> >>>> >>>> >>>> script fragment: >>>> >>>> PTR=`dig @some.dns +short +norec -x a.b.c.d` >>>> >>>> echo "$PTR" >>>> >>>> if [ "$PTR" == "" ] ; then >>>> >>> >>> if [ "$PTR" = "" ]; then >>> >>> or >>> >>> if [ -z "$PTR" ]; then >>> >>> or >>> >>> if [ "$PTR" ]; then >>> >>> but _NOT_ >>> >>> if [ "$PTR" == "" ]; then >>> >> >> >> I work across a bunch of different OSs and shells of many vintages. As I > recall, >> the -z argument has problems of portability on older/broken shells and/or >> is not available in all environments (I cannot recall which at the moment). > So >> I achieve the same results by using a character sentinel that guarantees that > the >> comparison always works: >> >> f [ _"$PTR" == _ ] ; then >> > > Character sentinels are not required. > > FreeBSD's sh(1) knows (because "[" is a built-in) that when you quote a > parameter, that it is not (even if the value begins with "-") not an operator. > That wasn't really my point. I use sentinels because in the face of an empty string this: if [ $PTR = "" ] Actually evaluates to: if [ = "" ] Which throws an error. The character sentinel avoids this without having to use -z, which as I said, I've had problems with not being too portable across older machinery. > All work as expected. It matters not the value of $foo. sh(1) in FreeBSD knows > because of the double-quotes that it is not an operator. > > Furthermore... > > "==" is not the right operator. It's "=". > > Portability would surely be compromised if you were using "==" (which doesn't > work on FreeBSD; or many other OSes I gather from experience). > Ooops, I did catch that and you're quite right. -- ----------------------------------------------------------------------- Tim Daneliuk
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51B62622.1070201>