Hi all,

Reading through the script files again, there seems to be several
different methods of doing the same thing :

i.e.  if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ];
then

or

if [[ -x "$self_path/postmaster" && -x "$self_path/psql" ]]; then




if [ x"$foo" = x"" ]; then

or

if [ "$op" = "" ]; then

or

if [ "$foo" ]; then


-- 
"My grandfather once told me that there are two kinds of people: those
who work and those who take the credit. He told me to try to be in the
first group; there was less competition there."
     - Indira Gandhi


Mon, 01 Oct 2001 23:37:37 +1000
Justin Clift <justin@postgresql.org>
When scripting, which is better?
Justin Clift wrote:


> if [ x"$foo" = x"" ]; then

This is the safest way.  It prevents problems when $foo begins with with a
"-"

I don't know about your first question, though.


Mon, 1 Oct 2001 10:59:10 -0400
"Ken Hirsch" <kenhirsch@myself.com>
Re: When scripting, which is better?
>>>>> "Justin" == Justin Clift <justin@postgresql.org> writes:

    Justin> if [ x"$foo" = x"" ]; then

    Justin> or

    Justin> if [ "$op" = "" ]; then

    Justin> or

    Justin> if [ "$foo" ]; then

I'm not the slightest bit a shell expert, but why not :-

if [ -z "$foo" ]; then

Is this POSIX/SUS2/whatever ?

Sincerely,

Adrian Phillips

-- 
Your mouse has moved.
Windows NT must be restarted for the change to take effect.
Reboot now?  [OK]

01 Oct 2001 17:15:14 +0200
Adrian Phillips <adrianp@powertech.no>
Re: When scripting, which is better?
> Hi all,
> 
> Reading through the script files again, there seems to be several
> different methods of doing the same thing :
> 
> i.e.  if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ];
> then

The above semicolon is useless.  Actually, I have never see this.  The
normal way is:

	if [ -x "$self_path/postmaster" -a -x "$self_path/psql" ]

> 
> or
> 
> if [[ -x "$self_path/postmaster" && -x "$self_path/psql" ]]; then


I usually do:

	if [ ... ]
	then

Pretty simple.

> 
> 
> 
> 
> if [ x"$foo" = x"" ]; then
> 
> or
> 
> if [ "$op" = "" ]; then

This is done if you think $op may have a leading dash.

> 
> or
> 
> if [ "$foo" ]; then
> 

This tests whether "$foo" is not equal to "".


-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Mon, 1 Oct 2001 12:46:32 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: When scripting, which is better?
Sorry guys,

I didn't realise I actually sent this, it was part of an email I was
putting together to achieve consistency in the scripts, but I thought I
cancelled it when it got late in the morning.

My apologies.

Regards and best wishes,

Justin Clift


Bruce Momjian wrote:
> 
> > Hi all,
> >
> > Reading through the script files again, there seems to be several
> > different methods of doing the same thing :
> >
> > i.e.  if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ];
> > then
> 
> The above semicolon is useless.  Actually, I have never see this.  The
> normal way is:
> 
>         if [ -x "$self_path/postmaster" -a -x "$self_path/psql" ]
> 
> >
> > or
> >
> > if [[ -x "$self_path/postmaster" && -x "$self_path/psql" ]]; then
> 
> I usually do:
> 
>         if [ ... ]
>         then
> 
> Pretty simple.
> 
> >
> >
> >
> >
> > if [ x"$foo" = x"" ]; then
> >
> > or
> >
> > if [ "$op" = "" ]; then
> 
> This is done if you think $op may have a leading dash.
> 
> >
> > or
> >
> > if [ "$foo" ]; then
> >
> 
> This tests whether "$foo" is not equal to "".
> 
> --
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 853-3000
>   +  If your life is a hard drive,     |  830 Blythe Avenue
>   +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

-- 
"My grandfather once told me that there are two kinds of people: those
who work and those who take the credit. He told me to try to be in the
first group; there was less competition there."
     - Indira Gandhi

Tue, 02 Oct 2001 18:56:10 +1000
Justin Clift <justin@postgresql.org>
Re: When scripting, which is better?
Justin Clift writes:

> i.e.  if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ];
> then
>
> or
>
> if [[ -x "$self_path/postmaster" && -x "$self_path/psql" ]]; then

I don't think the second one is a valid expression. ;-)

Maybe you were wondering about [[ ]] vs [] -- In Autoconf [] are the quote
characters so you have to double-quote, sort of.  It's better to use
'test' in that case because m4 quoting can be tricky.  I prefer test over
[] in general because it is more consistent and slightly clearer.

> if [ x"$foo" = x"" ]; then

Maximum safety for the case where $foo starts with a dash.  Yes, that
means all comparisons should really be done that way.  No, I don't think
we should do it in all cases if we know what $foo can contain, because
that makes code *really* unreadable.

> or
>
> if [ "$op" = "" ]; then
>
> or
>
> if [ "$foo" ]; then

These two are equivalent but the second one is arguably less clear.

-- 
Peter Eisentraut   peter_e@gmx.net   http://funkturm.homeip.net/~peter


Tue, 2 Oct 2001 20:53:48 +0200 (CEST)
Peter Eisentraut <peter_e@gmx.net>
Re: When scripting, which is better?