Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 什么是';(10#$H>;5)' ;;在bash脚本中是什么意思?_Linux_Bash_Shell - Fatal编程技术网

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#
,则使用base
10
。大于
9
的数字依次由小写字母、大写字母、
@
表示。如果
base
小于或等于
36
,则可以互换使用小写和大写字母来表示10到35之间的数字

来源:
manbash


你试过阅读吗?它说什么?…因为前导的
0
将导致bash将数字解释为八进制,这是错误的基数。可能需要添加零将被删除,因为如果值是八进制的…@Petesh-Updatedanswer@kvantour字符串比较对于长度不同(以数字为单位)的数字不起作用。例如,
[[“1”<“05”]]
为false,因为在字符排序顺序中,“1”位于“0”之后。在这种情况下,
$H
可能保证有两位数长,但最好不要指望它。在某些方面,一种不太晦涩的编码方式是
${H#0}
,尽管它只适用于一个前导零(这里应该足够了)。