Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Oct 2010 19:28:26 +0200
From:      Polytropon <freebsd@edvax.de>
To:        Chip Camden <sterling@camdensoftware.com>
Cc:        FreeBSD Questions <freebsd-questions@freebsd.org>
Subject:   Re: [OT] writing filters in sh
Message-ID:  <20101028192826.d3211524.freebsd@edvax.de>
In-Reply-To: <20101028161712.GC73337@libertas.local.camdensoftware.com>
References:  <20101027212841.GA67716@guilt.hydra> <20101028151148.GB73337@libertas.local.camdensoftware.com> <20101028160110.GA71713@guilt.hydra> <20101028161712.GC73337@libertas.local.camdensoftware.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 28 Oct 2010 09:17:12 -0700, Chip Camden <sterling@camdensoftware.com> wrote:
> Perhaps someone with more sh fu can transform the
> 'if' paragraph into a one-liner at least.  When I tried to do so, I got an
> unexpected ; error.

Not tested, but this should do the trick:

	#!/bin/sh
	if [ $# -ge 1 ] && ( exec cat $@ | $0; exit )
	while read data; do echo $data; done

The ; denotes a line break, means that you can use EITHER ; or
a newline. In the original construct, 

	if [ $# -ge 1 ]; then
		exec cat $@ | $0
		exit
	fi

you can change the ; into

	if [ $# -ge 1 ]
	then
		exec cat $@ | $0
		exit
	fi

which is often seen in scripts. In this case, no ; is required (or
even allowed). The same rule applies for the while/do/done iterator.


-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...



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