|
Getting around bash oddities (for ksh folk) BASH has some major oddities for long term ksh users. If like me you do things like:
t=0
cat somefile |while read a b c
do
t=$((t+a+b+c))
done
echo "total thing is $t"
And also:
echo $((12+34)) | read varthen you'll get quite pissed off with bash because none of these things work. The technical explanation is that the pipe symbol always creates a subprocess. Because you perform your read in a subprocess the variable only gets set within the subprocess, hence when the subprocess ends the contents of the variable also disappear. Here's how to do that loop properly in bash:
t=0
while read a b c
do
t=$((t+a+b+c))
done <somefile
echo "total thing is $t"
And for the simple variable setting, there are a few options:
# this is specific to bash (note the spaces) read var < <((echo $((12+34)) )) # or this one read var <<EOF $(echo $((12+34)) ) EOF pablo , 2003-12-06 21:23:13 |