>> # grep thinks the second argument is a file
>> > BL="^index.md$ ^images$" # Black list
>> BL="^index.md$\|^images$" # Black list
>
> Wrong, take a look at this line:
> BL=`echo ${BL} | sed -e "s/\( \+\|^\)/ -e /g"`
Yes, -e allows you to do this. However, in the original code you had
> BL="^index.md$ ^images$" # Black list
and later...
> for i in `ls ${SITE}/${DIR} | grep -v ${BL}`; do
I know the blacklist ($BL) was meant as an example, but if you run this
code you'll see that grep errors out because it thinks `^images$' is a
file.
If you really want people to use space as a delimiter, then either do:
for i in BL; do
tmp="$tmp -e $i"
done
BL=$tmp
grep -q $BL
or:
set -- $BL
IFS='|'
BL=$*
grep -Eq "$BL" ...
Both are pretty stupid.
>> # echo | blah is becoming rampant; let's not ignore it this time
>> > QUERY=`echo ${REQUEST_URI} | sed -e "s,.*${BIN}/*\(.*\),\1,"`
>> QUERY=`sed "s,.*$BIN/*\(.*\),\1," <<-!
>> $REQUEST_URI
>> !
>
> So, it is better to use 3 loc for this?
Sadly, POSIX shell sucks. In bash, perl and powershell you could get
away with a less verbose herestring:
grep pattern <<< str
>> # Why heredoc instead of subshell?
>> # Compare: time for i in `seq 1 1000`; do echo str | grep pattern
>> >/dev/null; done
>> # ...with: time for i in `seq 1 1000`; do grep pattern >/dev/null <<-!
>> # str
>> # !
>> # heredocs can also contain subshells... you save one
>> # from `cmd | cmd`
>> > DIR=`dirname ${QUERY} | sed -e "s,/*$,,"`>
>> > # done
>
> I see, this is a more interesting argument for using heredocs. But,
> just a question (because I don't really know) is heredocs as standard as
> a plain "echo blah | cmd" ?
heredocs are defined by POSIX, if that's what you mean by standard
Semi unrelated question: why are so many people at suckless using ` `
instead of $( ) ? I've seen it here, dmenu_path, surf's config.h... etc.
$( ) only fails in very, very old shells... think original bourne
Received on Sun Apr 04 2010 - 17:03:55 UTC
This archive was generated by hypermail 2.2.0 : Sun Apr 04 2010 - 17:12:03 UTC