((num#Hour)) 在 bash 脚本中是什么意思?

Moh*_*asi 19 shell scripting bash

我有一个包含以下 2 行的 bash 脚本:

Hour=$(date +"%H")
Hour=$((10#$Hour))
Run Code Online (Sandbox Code Playgroud)

2号线有什么作用?

jes*_*e_b 25

该10#告诉它使用基地10扩大数量:

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

例子:

基数 16:

$ echo $((16#A))
10
Run Code Online (Sandbox Code Playgroud)

基数 8:

$ echo $((8#12))
10
Run Code Online (Sandbox Code Playgroud)

基数 2:

$ echo $((2#1010))
10
Run Code Online (Sandbox Code Playgroud)

正如 steeldriver 指出的那样,这可能是为了处理 date 命令中任何潜在的前导零,但使用最新版本的 GNU date 可以更轻松地使用: date +%-H

  • 在这种特殊情况下,可能值得一提的是(至少在最新版本的 GNU `date` 中)可以使用 printf 样式的 `-` 格式修饰符 `+%-H` 在源代码中抑制前导零 (2认同)
  • @steeldriver -是的... https://unix.stackexchange.com/q/70966/22142 (2认同)