JP Vossen on 5 Apr 2011 00:35:58 -0700


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [PLUG] Bash 101 resources


Date: Sun, 3 Apr 2011 19:43:30 -0400
From: Mag Gam<magawake@gmail.com>
Subject: Re: [PLUG] Bash 101 resources

Very nice slide show.

Thanks.  I hope it's useful.


One comment about the if statements. Should they be double brackets
versus single?

It depends...


#correct way?
if [[ -d /foo ]]; then
   echo
fi

I'd say "new" way.


instead of
if [ -d /foo ]; then
   echo
fi


See my http://www.bashcookbook.com/bashinfo/ page and pick "The bash Reference Guide" link for the version of bash you are using. I picked 4.2 just to have the latest, but this stuff hasn't changed in a while. See the "NEWS" and/or "CHANGES" links if you care what changed when.

Anyway...

http://www.bashcookbook.com/bashinfo/source/bash-4.2/doc/bashref.html#SEC83

(Hint: search for 'test' when looking for '[', as there are tons of '[' characters in the document.)

"Conditional expressions are used by the [[ compound command and the test and [ builtin commands. [...]"

So according to Chet, '[[' is a compound command but '[' is a builtin.

What does that mean to you?  I dunno.

My *personal* and admittedly imprecise rule-of-thumb is basically this. I think of '[[' as the "new" one that can do better pattern matching and regular expressions. But I mostly use the older '[' out of habit unless I'm doing something that really needs the new one. And come to think of it, '[[' is probably less portable. Yup. According to http://princessleia.com/plug/2008-JP_bash_vs_dash.pdf, dash doesn't have '[['. If you don't think you care about dash, you're wrong if you use Debian or Ubuntu... See the link as to why. (Hint: /bin/sh == dash in newer Ubuntu & Debian, and bash != Bourne != dash...)


Getting back to the simple example above, except for portability I don't think it really matters if you use '[' or '[['. I'd use '[' out of habit and because it's less typing and maybe looks a tiny bit less cluttered.

Actually, for something that simple I'd probably write:
	[ -d foo ] && echo 'exists'

Good?
JP
----------------------------|:::======|-------------------------------
JP Vossen, CISSP            |:::======|      http://bashcookbook.com/
My Account, My Opinions     |=========|      http://www.jpsdomain.org/
----------------------------|=========|-------------------------------
"Microsoft Tax" = the additional hardware & yearly fees for the add-on
software required to protect Windows from its own poorly designed and
implemented self, while the overhead incidentally flattens Moore's Law.
___________________________________________________________________________
Philadelphia Linux Users Group         --        http://www.phillylinux.org
Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce
General Discussion  --   http://lists.phillylinux.org/mailman/listinfo/plug