'((10#$ H> 5))'在bash脚本中意味着什么?

Ren*_*Ren 4 linux bash shell

我对以下代码片段感到困惑:

#!/bin/bash

H=$(date +%H); 
if (( 10#$H > 5 ))
then 
        # do something
else 
        # do something else
fi
Run Code Online (Sandbox Code Playgroud)

(( 10#$H > 5 ))上面代码片段的含义是什么?

tom*_*fic 11

10#$H装置使用基座10扩大的数量.

这可能是为了从日期中删除任何前导零,因为bash将解释基数8(八进制)中的数字.

例:

$ echo "$(( 08 < 5 ))"
bash: 08: value too great for base (error token is "08")
Run Code Online (Sandbox Code Playgroud)

算术评估:具有前导的常量0被解释为八进制数. 前导0x0X表示十六进制.否则,数字采取的形式[base#]n,其中base是之间的十进制数264 表示算术基和n是在一个数base.如果base#省略,则使用base 10.大于的数字9由小写字母,大写字母@_按顺序表示.如果base小于或等于36,则可以互换地使用小写和大写字母来表示10到35之间的数字.

资源: man bash

  • ...因为前导的'0`将导致bash将数字解释为八进制,这是错误的基数. (2认同)
  • @kvantour字符串比较不适用于长度不同的数字(以数字表示).例如,`[["1"<"05"]]`为false,因为"1"在字符排序顺序中位于"0"之后.在这种情况下,`$ H`*可能*保证两位数长,但最好不要指望它. (2认同)