Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: grammar triviality with '&&'



On Mon, Mar 2, 2015 at 8:17 AM, Ray Andrews <rayandrews@xxxxxxxxxxx> wrote:

>
> if [ -e 'shelly.txt' ]
> && [ -n "$ozymandias" ]
> && [ grep "I met a traveler" ]
> then
>   echo "Look on my works, ye mighty"
> fi
>

Why are you using ancient Bourne-shell syntax? If you need compatibility
with the Bourn-shell you can't use the feature you're asking for. If you
use the slightly less ancient Korn-shell syntax you can break the test
across lines the way you want:

#!/bin/zsh
ozymandia=yes

if [[ -e 'shelly.txt'
   && -n "$ozymandia"
   && -n $(grep "I met a traveler" shelly.txt) ]]
then
    echo "Look on my works, ye mighty"
fi

Note that I fixed your command as "grep" isn't a valid test; although, I
wouldn't write it that way in practice as it isn't efficient.

P.S., Are you aware that in the days of the Bourne-shell that the shell did
not interpret tests like "-e" it simply ran the "[" command and checked its
exit status. In fact that command should still exist on your system as a
hardlink to the "test" command. Run

$ ls -li '/bin/[' /bin/test
123034700 -rwxr-xr-x  2 root  wheel  18480 Sep  9 15:44 /bin/[*
123034700 -rwxr-xr-x  2 root  wheel  18480 Sep  9 15:44 /bin/test*

to see this.

-- 
Kurtis Rader
Caretaker of the exceptional canines Junior and Hank


Messages sorted by: Reverse Date, Date, Thread, Author