Bash/シェルですべての数値を変換するには?
VAR=00005
VAR=00010
VAR=00601
VAR=00550
に
echo $VAR #5
echo $VAR #10
echo $VAR #601
echo $VAR #550
Bash/シェルですべての数値を変換するには?
VAR=00005
VAR=00010
VAR=00601
VAR=00550
に
echo $VAR #5
echo $VAR #10
echo $VAR #601
echo $VAR #550
$> cat text
00005
00010
00601
00550
$> sed -r 's/0*([0-9]*)/\1/' text
5
10
601
550
使用printf
:
$> while read n; do printf "%0d\n" $((10#$n)); done < text
5
10
601
550
数値形式が数値を想定している場合、内部の printf コマンドは基数に関して一般的な Bash 算術規則を使用することに注意してください。小数表現を強制し、副作用として Bash 変数の先頭のゼロも削除するには、使用する必要があります$((10#$n))
またはこのように:
kent$ echo "00005
00010
00601
00550"|awk '$0*=1'
5
10
601
550
更新された質問(VARを使用)
まず第一に、すべてがVARと同じではなく、異なる変数名を使用する必要があります。
以下の例を参照してください。
kent$ VAR=00601
kent$ VAR=$((VAR+0))
kent$ echo $VAR
601
編集
コメントのために。(08、09は機能しませんでした):
08、09はここで働いていましたが、私のシェルでやるべきことがあるかもしれません。私はzshを持っています。私はbashの下で以下をテストしました、彼らは働きました。希望が役立ちます:
zshの下:
kent$ v=08
kent$ v=$((v+0))
kent$ echo $v
8
bashの下で、以下が機能しました
kent@7PLaptop:/tmp$ bash -version
GNU bash, version 3.2.48(1)-release (i486-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
kent@7PLaptop:/tmp$ v=08
kent@7PLaptop:/tmp$ v=$(sed 's/^0*//'<<< $v)
kent@7PLaptop:/tmp$ echo $v
8
ではextglob
、外部プロセスは必要ありません。
shopt -s extglob # Enable extended globbing
for i in 00005 00010 00601 00550; do
echo ${i##+(0)}
done
printf
先頭のゼロを追加または削除するために使用できます。
$ printf "%05d\n" 5
00005
$ printf "%d\n" 00005
5
$ printf "%010d\n" 00005
0000000005
宛先: ДМИТРИЙ МАЛИКОВ
printf "%d\n" 0000
printf "%d\n" 0001
printf "%d\n" 0002
printf "%d\n" 0003
printf "%d\n" 0007
printf "%d\n" 0008
printf "%d\n" 0009
printf "%d\n" 0010
printf "%d\n" 0011
printf "%d\n" 0012
結果
0
1
2
3
7
0 line 8: printf: 0008: invalid octal number
0 line 9: printf: 0009: invalid octal number
8 !error - correctly 10
9 !error - correctly 11
10 !error - correctly 12