From owner-freebsd-questions@FreeBSD.ORG Mon Jun 10 19:12:05 2013 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 1BFDC40C; Mon, 10 Jun 2013 19:12:05 +0000 (UTC) (envelope-from Devin.Teske@fisglobal.com) Received: from mx1.fisglobal.com (mx1.fisglobal.com [199.200.24.190]) by mx1.freebsd.org (Postfix) with ESMTP id E13911BB8; Mon, 10 Jun 2013 19:12:04 +0000 (UTC) Received: from smtp.fisglobal.com ([10.132.206.16]) by ltcfislmsgpa04.fnfis.com (8.14.5/8.14.5) with ESMTP id r5AJBlpp003471 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Mon, 10 Jun 2013 14:12:00 -0500 Received: from dtwin (10.242.182.25) by smtp.fisglobal.com (10.132.206.16) with Microsoft SMTP Server (TLS) id 14.2.309.2; Mon, 10 Jun 2013 14:11:58 -0500 From: Sender: Devin Teske To: , References: <51b620a6.42f.2b6a6400.5605dcf0@go2france.com> <121701ce660c$9a9aa5b0$cfcff110$@freebsd.org> <51B62389.5000500@tundraware.com> In-Reply-To: <51B62389.5000500@tundraware.com> Subject: RE: Bourne shell "if" syntax Date: Mon, 10 Jun 2013 12:10:26 -0700 Message-ID: <121b01ce660e$2abae5f0$8030b1d0$@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Content-Language: en-us Thread-index: AQKqCa+a9hyR0ot3Jqq7BhaQloss/QGZ464NAYNXZdaXXx3XMA== X-Originating-IP: [10.242.182.25] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.10.8626, 1.0.431, 0.0.0000 definitions=2013-06-10_05:2013-06-10,2013-06-10,1970-01-01 signatures=0 Cc: Devin Teske X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jun 2013 19:12:05 -0000 > -----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. So doing things like: foo=-gt if [ "$foo" = "" ]; then or foo=-gt if [ -z "$foo" ]; then or if [ ! "$foo" ]; then or even the following (flipping the conditional): if [ "$foo" != "" ]; then if [ -n "$foo" ]; then if [ "$foo" ]; then 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). -- Devin _____________ The information contained in this message is proprietary and/or confidential. If you are not the intended recipient, please: (i) delete the message and all copies; (ii) do not disclose, distribute or use the message in any manner; and (iii) notify the sender immediately. In addition, please be aware that any message addressed to our domain is subject to archiving and review by persons other than the intended recipient. Thank you.