`10#N`的含义

`10#N`的含义

吉米写道:

在这种情况下我可能最终会使用临时目录:

for file in [[:digit:]]*.png; do
    echo mv $file tmp/$(printf %04d $((10#${file%.png}+1))).png
done

重要的部分是10#N强制 bash 将其解释000N为 just N,否则前导零表示八进制数。

10#N算术展开式的一部分,还是其他什么?

Bash 手册或 POSIX 规范中是否提到了这一点?我没找到。

答案1

10#N或一般形式[base#]n,其中2 <= base <= 64将解释n为该基数中的数字。

手册bash,部分壳算术提到了这一点。

请注意,此功能并未由 POSIX 指定,仅在及其派生词中可用,bash基数在 2 到 36 之间。kshzsh

答案2

来自算术评估部分bash手册,

以 0 开头的常量被解释为八进制数。前导 0x 或 0X 表示十六进制。否则,数字采用 [base#]n 形式,其中 base 是表示算术基数的 2 到 64 之间的十进制数,n 是该基数中的数字。如果省略 base#,则使用基数 10。大于9的数字按小写字母、大写字母、@、_的顺序表示。如果底数小于或等于 36,则小写和大写字母可以互换使用来表示 10 到 35 之间的数字。

答案3

当然是在man bash里面ARITHMETIC EVALUATION

LESS=+/'\[base#\]n,' man bash

否则,数字采用 [base#]n 形式,其中可选基数是表示算术基数的 2 到 64 之间的十进制数,n 是该基数中的数字。

相关内容