Tim Eagle
Tim Eagle

Reputation: 51

Remove leading zero from BASH array variables

I am trying to remove leading zeroes from a BASH array... I have an array like:

echo "${DATES[@]}"

returns

01 02 02 03 04 07 08 09 10 11 13 14 15 16 17 18 20 21 22 23

I'd like to remove the leading zeroes from the dates and store back into array or another array, so i can iterate in another step... Any suggestions?

I tried this,

for i in "${!DATES[@]}"
do
    DATESLZ["$i"]=(echo "{DATES["$i"]}"| sed 's/0*//' ) 
done

but failed (sorry, i'm an old Java programmer who was tasked to do some BASH scripts)

Upvotes: 4

Views: 4115

Answers (4)

user2350426
user2350426

Reputation:

If: ${onedate%%[!0]*} will select all 0's in front of the string $onedate.

we could remove those zeros by doing this (it is portable):

echo "${onedate#"${onedate%%[!0]*}"}"

For your case (only bash):

#!/bin/bash
dates=( 01 02 02 08 10 18 20 21 0008 00101 )

for onedate in "${dates[@]}"; do
    echo -ne "${onedate}\t"
    echo "${onedate#"${onedate%%[!0]*}"}"
done

Will print:

$ script.sh
01      1
02      2
02      2
08      8
10      10
18      18
20      20
21      21
0008    8
00101   101

Upvotes: 0

glenn jackman
glenn jackman

Reputation: 246877

With bash arithmetic, you can avoid the octal woes by specifying your numbers are base-10:

day=08
((day++))           # bash: ((: 08: value too great for base (error token is "08")
((day = 10#$day + 1))
echo $day              # 9
printf "%02d\n" $day   # 09

Upvotes: 4

blue
blue

Reputation: 2793

You can use bash parameter expansion (see http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html) like this:

echo ${DATESLZ[@]#0}

Upvotes: 1

choroba
choroba

Reputation: 241928

Use parameter expansion:

DATES=( ${DATES[@]#0} )

Upvotes: 12

Related Questions