Portál AbcLinuxu, 10. listopadu 2025 17:00
e=0000
for i in "${DATA[@]}";
do
e=$((e +1))
done
Výsledek který bych potřeboval
0001
0002
..
0010
0011
..
0999
atd..
Řešení dotazu:
pocet=${#DATA[@]}
for i in `seq 1 $pocet`; do
printf "%04d\n" $i;
done
for i in 00..9999; do
echo $i
done
[pavlix@dragon ~]$ $SHELL --version GNU bash, version 4.2.29(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. [pavlix@dragon ~]$ \ > for i in 00..9999; do > echo $i > done 00..9999
for i in {00..9999}; do
echo $i
done
Do verzie 3, bola expanzia {0..99} rovnaka ako {00..99}. Od verzie 4 ta druha verzia doplna nuly. Kedysi som sa s tym dost hral, pretoze som riesil expanziu XML do adresaroveho stromu do fs v ramdisku a potreboval som generovat rovnako dlhe cisla. Takze mam este zbierku inych rieseni:
# printf je interny prikaz bashu a nespusta proces printf %09d "$1" # ak treba vysledok ulozit do premennej, tak sa da vyhnut subshellu printf -v var %09d "$1" echo "$var"A mal som este jedno starsie riesenie zalozene na cviceni s premennymi:
zeros=0000000000
num="$1"
if [[ ${#num} -lt 10 ]]; then
len=$((10 - ${#num}))
num="${zeros:0:$len}$num"
fi
echo $num
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.