Operating System - HP-UX
1753424 Members
5009 Online
108793 Solutions
New Discussion юеВ

Re: expr stripping off leading zeroes from a string

 
SOLVED
Go to solution
James R. Ferguson
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

HI (again):

> Dennis: Why would a shell patch break the correct standard behavior of expr(1), to make it work like Paul wants?

A long shot, granted, but why not ask about the latest cumulative shell patch?

Regards!

...JRF...
Dennis Handly
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

>JRF: A long shot, granted

I suppose that make sense if you hadn't read my reply stating that expr(1) is working as mandated by the POSIX Standard.
Bill Hassell
Honored Contributor
Solution

Re: expr stripping off leading zeroes from a string

UNIX95 will have unexpected results on a number of different commands and libraries. Unless you search through every man page, even the simplest form of defining UNIX95 will trigger unique behavior. That's why exporting, even defining the variable in the current shell is never recommended.

Instead, UNIX95 should be defined (appear on the right side of =) just for the process such as ps:

UNIX95= ps -eH

As far as I know, UNIX95 only has to be defined, null as the above example, or assigned any string to change behavior.


Bill Hassell, sysadmin
Dennis Handly
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

>Bill: Unless you search through every man page

Unfortunately that's not good enough. :-(
Only these are documented, not expr(1).
for i in /usr/share/man/man1.Z/*; do
zcat $i | fgrep -q UNIX95
if [ $? -eq 0 ]; then echo $(basename $i); fi
done

awk.1 cp.1 edit.1 ex.1 find.1 patch.1 pr.1 ps.1 vedit.1 vi.1 view.1
11.31:
admin.1 alias.1 asa.1 awk.1 bg.1 cal.1 cp.1 cu.1
date.1 edit.1 ex.1 fc.1 fg.1 jobs.1 make.1 nl.1
od.1 patch.1 ps.1 pwd.1 rsh.1 sed.1 sh-posix.1
sort.1 unalias.1 vedit.1 vi.1 view.1 wc.1 who.1 xd.1
James R. Ferguson
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

Hi (again):

> Dennis: I suppose that [would] make sense if you hadn't read my reply stating that expr(1) is working as mandated by the POSIX Standard.

Yes, for the record, I didn't see that in the ~ 4-minutes between my suggestion to fetch the cumulative sh-posix patch and your indication that "The POSIX standard says using substr on numbers is unpredictable".

That's good to know and it suggests that one has to look at the POSIX standards to be aware of this.

Paul's example is with a string, albeit that the string consists of digits. Does the standard distinguish between "strings", "integers" and "strings of numbers"?

Regards!

...JRF...
Paul Maglinger
Regular Advisor

Re: expr stripping off leading zeroes from a string

Always a pleasure to start up a lively conversation. Your information was quite useful and I appreciate your comments.

Just a side note that I'm getting better information (and faster) from this forum than I'm getting from the HP software support that we're paying for.

Thanks guys!
Dennis Handly
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

>... than I'm getting from the HP software support that we're paying for.

Very indirectly that pays for me. :-)

>JRF: Does the standard distinguish between "strings", "integers" and "strings of numbers"?

The latter doesn't exist:
A string argument is an argument that cannot be identified as an integer argument

The source checks if numeric and strips leading zeros.

The "APPLICATION USAGE" gives you a hint how to solve the problem:
expr substr X"$x" 2 2