Linux 什么是';(10#$H>;5)' ;;在bash脚本中是什么意思?
我对以下代码片段感到困惑:Linux 什么是';(10#$H>;5)' ;;在bash脚本中是什么意思?,linux,bash,shell,Linux,Bash,Shell,我对以下代码片段感到困惑: #!/bin/bash H=$(date +%H); if (( 10#$H > 5 )) then # do something else # do something else fi 在上面的代码片段中,((10#$H>5))是什么意思?10#$H表示使用基数10扩展数字 这样做可能是为了从日期中删除任何前导零,因为bash将解释基数为8(八进制)的数字 例如: $ echo "$(( 08 < 5 ))" b
#!/bin/bash
H=$(date +%H);
if (( 10#$H > 5 ))
then
# do something
else
# do something else
fi
在上面的代码片段中,((10#$H>5))
是什么意思?10#$H表示使用基数10扩展数字
这样做可能是为了从日期中删除任何前导零,因为bash将解释基数为8(八进制)的数字
例如:
$ echo "$(( 08 < 5 ))"
bash: 08: value too great for base (error token is "08")
$echo“$(08<5))”
bash:08:值对于base太大(错误标记为“08”)
算术计算:前导0
的常量被解释为八进制数。前导0x
或0x
表示十六进制。否则,数字的形式为[base#]n
,其中base
是介于2
和64
之间的十进制数,表示
算术基数和n
是base
中的一个数字。如果省略了base#
,则使用base10
。大于9
的数字依次由小写字母、大写字母、@
和
表示。如果base
小于或等于36
,则可以互换使用小写和大写字母来表示10到35之间的数字
来源:manbash
你试过阅读吗?它说什么?…因为前导的
0
将导致bash将数字解释为八进制,这是错误的基数。可能需要添加零将被删除,因为如果值是八进制的…@Petesh-Updatedanswer@kvantour字符串比较对于长度不同(以数字为单位)的数字不起作用。例如,[[“1”<“05”]]
为false,因为在字符排序顺序中,“1”位于“0”之后。在这种情况下,$H
可能保证有两位数长,但最好不要指望它。在某些方面,一种不太晦涩的编码方式是${H#0}
,尽管它只适用于一个前导零(这里应该足够了)。