[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bug in expr***urgent
From: |
Eric Blake |
Subject: |
Re: Bug in expr***urgent |
Date: |
Tue, 19 Jan 2010 06:10:04 -0700 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666 |
According to salih k on 1/16/2010 7:32 AM:
> Piece of Script
> --------------------------
>
> /isnum=`awk -F$delim '$1=="BH"{print $5}' $fil`/
> /
That's still not exactly what you ran (you marked it up afterwards), but
it is close enough, I suppose.
> int_num=`echo -e $isnum | cut -f1 -d'.'`
echo -e is not portable. And if all you are trying to do is grab
everything before the first '.', you can do that without even forking:
int_num=${isnum%%.*}
But using a more efficient implementation won't change the net result of
your script, at least on systems where echo -e does what you wanted.
> add_num=`expr $int_num + 1 1>/dev/null 2>&1`
This line sets add_num to the empty string (because there is no output
from expr). Why run a command substitution if there won't be any output?
Also, your lack of shell quoting could cause you grief; it would be more
robust to use "$int_num" rather than $int_num. The following is similar
to your above line, but safer:
add_num=
expr "$int_num" + 1 >/dev/null 2>&1
kms=$?
And even more efficiently, you can get the same results without forking,
by following my earlier advice:
case $int_num in
*[!0-9]*) kms=1; echo non-numeric;;
*) kms=0; echo numeric;;
esac
But again, switching to a more efficient implementation shouldn't seem to
have any bearing on your results.
> kms=$?
> # if [ "$?" -ne "0" ]
> if [ "$kms" -ne "0" ]
> then
> log_msg "Debug msg4.new1 File has expr pstat $kms int_num is
> $int_num"
Well, I don't see anything obvious about why you are seeing this:
> Debug msg3.1 File FILE1 has int_num1 28 has ps 0
> Debug msg4.new1 File has expr pstat 51198 int_num is 28
...
> Debug msg3.1 File FILE2 has int_num1 1 has ps 0
then again, you post-formatted the output, too (notice the inconsistent
spacing), and you didn't post the definition of log_msg. So who knows
what else your post-formatting has changed, such that we aren't seeing
EXACTLY what happened to you.
But if it is a bug, then the bug is in your /bin/sh and not in expr. And
if you really do have a buggy shell, then there's nothing this list can do
to help you.
> Is it because add_num=`expr $int_num + *1 1>/dev*/null 2>&1` whether i
> have to chanage it to
> add_num=`expr $int_num + *1 >*/dev/null 2>&1`?
The change between '>/dev/null' and '1>/dev/null' has no effect - they are
strictly equivalent in shell programming. You may be benefited by doing
more homework on shell programming. But so far, you have failed to show
any evidence of a bug in expr. And inserting spurious * into the lines
doesn't make your example any easier to attempt and reproduce.
--
Don't work too hard, make some time for fun as well!
Eric Blake address@hidden
signature.asc
Description: OpenPGP digital signature