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
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
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.
"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]
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
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" ];
thenThe 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 [ ... ]
thenPretty 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
Justin Clift writes:
i.e. if [ -x "$self_path/postmaster" ] && [ -x "$self_path/psql" ];
thenor
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