Operating System - HP-UX
1748265 Members
3914 Online
108760 Solutions
New Discussion юеВ

Re: expr stripping off leading zeroes from a string

 
SOLVED
Go to solution
Paul Maglinger
Regular Advisor

expr stripping off leading zeroes from a string

Using the following:

#!/bin/sh
x='00545'
expr substr "$x" 1 2

The above code produces the following output:
54

Shouldn't it have produced:
00

Running HP-UX 11.23 on Itanium servers.
16 REPLIES 16
OldSchool
Honored Contributor

Re: expr stripping off leading zeroes from a string

what does it do in ksh?

Paul Maglinger
Regular Advisor

Re: expr stripping off leading zeroes from a string

Same thing. Tried it on several different shells, no joy.
James R. Ferguson
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

Hi:

This returns "00" on an 11.23 Itanium for me:

# cat ./mysh
#!/bin/sh
x='00545'
expr substr "$x" 1 2

# ./mysh
00

# what /bin/sh
/bin/sh:
Version M-11/16/88f
$ B.11.23 Aug 22 2007 09:08:12 $
builtin.c $Date: 2005/01/19 00:36:04 $Revision: r11.23/5 PATCH_11.23 (PHCO_32444)
service.c $Date: 2007/03/06 17:54:39 $Revision: r11.23/3 PATCH_11.23 (PHCO_34129)
xec.c $Date: 2005/11/22 04:08:50 $Revision: r11.23/6 PATCH_11.23 (PHCO_34129)
emacs.c $Date: 2007/01/05 12:12:17 $Revision: r11.23/4 PATCH_11.23 (PHCO_34129)
fault.c $Date: 2007/03/06 17:54:43 $Revision: r11.23/6 PATCH_11.23 (PHCO_34129)
history.c $Date: 2007/04/23 15:02:12 $Revision: r11.23/1 PATCH_11.23 (PHCO_36506)
io.c $Date: 2007/04/23 15:02:21 $Revision: r11.23/4 PATCH_11.23 (PHCO_36506)
jobs.c $Date: 2005/08/10 00:06:06 $Revision: r11.23/5 PATCH_11.23 (PHCO_32444)
test.c $Date: 2007/10/12 18:33:56 $Revision: r11.23/2 PATCH_11.23 (PHCO_36506)
$Revision: @(#) ksh R11.23_BL2007_1114_1 PATCH_11.23 PHCO_36506


Regards!

...JRF...
Paul Maglinger
Regular Advisor

Re: expr stripping off leading zeroes from a string

We've found some additional information.
This seems to occur when we have UNIX95=XP64 in the environment. When we unset this, it works correctly. Now I'm wondering why it doesn't work when UNIX95=XP64.
James R. Ferguson
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

Hi (again) Paul:

Using 11.23 (with current patches) on an rx2660, I can't reproduce this:

# cat ./mysh
#!/bin/sh
UNIX95=XP64
x='00545'
expr substr "$x" 1 2

...which works the same as :

# cat ./mysh
#!/bin/sh
UNIX95=
x='00545'
expr substr "$x" 1 2

...

I would never capriciously set 'UNIX95' unless you are specifically needing it; e.g with 'ps' to enable the '-o' formatting options.

Regards!

...JRF...
Dennis Handly
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

This also fails if you have "typeset -i x", since x would be an integer.

>This seems to occur when we have UNIX95=XP64 in the environment. When we unset this, it works correctly. Now I'm wondering why it doesn't work when UNIX95=XP64.

You shouldn't be exporting UNIX95=MAKE_EXPR_HAVE_DIFFERENT_SUBSTR_RESULTS.
The POSIX standard says using substr on numbers is unpredictable.

The only time you should use UNIX95 is with:
UNIX95=EXTENDED_PS ps -Hef ...
This only exports UNIX95 for the one command.
James R. Ferguson
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

Hi:

Do you have PHCO_36506 ? If not, you might try applying it (no reboot is required) and then retest.

Regards!

...JRF...
Paul Maglinger
Regular Advisor

Re: expr stripping off leading zeroes from a string

Uh... just noticed a typo
We were exporting UNIX95=XPG4

Time for glasses...
Dennis Handly
Acclaimed Contributor

Re: expr stripping off leading zeroes from a string

>JRF: Do you have PHCO_36506?

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

>just noticed a typo, We were exporting UNIX95=XPG4

No, you were really exporting: :-)
UNIX95=MAKE_EXPR_HAVE_DIFFERENT_SUBSTR_RESULTS

>Time for glasses

Or cut & past. :-)