Bash
如何在bash中迭代零填充整數?
如何使用“”形式迭代一個字元串
$$ A-Z $$$$ 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}
,但這是一個完全不同的問題。
在
bash
中,帶前導零的數字被視為八進制。要強制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