「[AZ][0-9]*」の形式の文字列(「A000001」など)を繰り返すには?
変数を受け取ったら、次のように分けました。
current_=$(mysql -h"$mysqlhost" -u"$mysqluser" -p"$PASS" "$DBNAME" -se "SELECT current_ FROM $GLOBALDB;")
current_number=$(echo $current_ | grep -oh "[0-9]*")
current_letter=$(echo $current_ | grep -oh "[A-Z]*")
しかし、1を追加しようとすると、次のようになります。
# add 1 & keep all leading zeros "000001"
next_number=$(printf %06d $(($current_number + 1)))
「000009」と計算され、「000000」にロールバックされます。
私は次のように追加しました。
next_=$(echo "$current_letter$next_number")
文字反復に関して連想配列を使用するつもりですか?または中括弧の拡張です{A..Z}
が、まったく異なる質問です。
ベストアンサー1
では、bash
前に0が付いた数字が8進数として扱われます。小数点として処理するには、プレフィックスを追加bash
します。10#
next_number=$(printf %06d "$((10#$current_number + 1))")
またはフォークを避けるには、bash 3.1以降を使用してください。
printf -v next_number %06d "$((10#$current_number + 1))"
(に示すように、負の数には機能しないため、10#-010
およびに展開されます。)10#0 - 010
bash
$((10#-10))
$((-10#-10))
-8
また見なさい:
$ printf 'A%06d\n' {5..12}
A000005
A000006
A000007
A000008
A000009
A000010
A000011
A000012
または:
$ printf '%s\n' {A..C}{00008..00012}
A00008
A00009
A00010
A00011
A00012
B00008
B00009
B00010
B00011
B00012
C00008
C00009
C00010
C00011
C00012
または:
$ seq -f A%06g 5 12
A000005
A000006
A000007
A000008
A000009
A000010
A000011
A000012