Shell 壳#内(())

Shell 壳#内(()),shell,Shell,我对壳牌公司不熟悉。我不太理解下面的函数。此功能基本上将小时数增加1 我想知道为什么开发者在$g_current_hour+1前面加上“10”。据我理解,shell中的dose#是指评论吗 f_increment_hour() { g_next_hour=$((10#$g_current_hour+1)) } 一切都取决于上下文。这里10 #表示基数10 前导为0的常数被解释为八进制数。A. 前导0x或0x表示十六进制。否则,数字就占了上风 形式[base#]n,其中可选的基数是介于

我对壳牌公司不熟悉。我不太理解下面的函数。此功能基本上将小时数增加1

我想知道为什么开发者在$g_current_hour+1前面加上“10”。据我理解,shell中的dose#是指评论吗

f_increment_hour() {
    g_next_hour=$((10#$g_current_hour+1))
}

一切都取决于上下文。这里
10 #
表示基数10

前导为0的常数被解释为八进制数。A. 前导0x或0x表示十六进制。否则,数字就占了上风 形式[base#]n,其中可选的基数是介于 2和64表示算术基数,n是其中的数字 基础如果省略了基数#,则使用基数10

“#”将被解释为标记的一部分,除非它前面有空格、换行符或分号。 (或任何其他非文字符号)

语言规范第2.3节“令牌识别”规定:

7. If the current character is an unquoted <newline>, the current token shall be delimited. 8. If the current character is an unquoted <blank>, any token containing the previous character is delimited and the current character shall be discarded. 9. If the previous character was part of a word, the current character shall be appended to that word. 10. If the current character is a '#' , it and all subsequent characters up to, but excluding, the next <newline> shall be discarded as a comment. The <newline> that ends the line is not considered part of the comment. 7.如果当前字符是无引号的,则当前 令牌应被分隔。 8.如果当前字符是无引号的,则任何标记 包含上一个字符的将被分隔,当前 字符将被丢弃。 9如果前一个字符是单词的一部分,则当前字符为 应附加在该词后面。 10如果当前字符是“#”,则它将包含所有后续字符 最多(但不包括)下一个应作为 评论。不考虑线的端点 评论的一部分。 当shell解析其输入并读取“foo#bar”时,当它处理“#”字符时,它应用规则9并将#附加到令牌。一旦应用规则9,它将停止检查,并且永远不会考虑规则10。如果“#”前面的字符是空白,则规则9不适用,因此选中规则10并开始注释


换句话说,“#”只有在前面的字符不是单词的一部分(例如空格或分号)时才开始注释,因此“foo#bar”是一个标记,而不是后跟注释的“foo”,但“foo#bar”是后跟注释的标记“foo”。

+1:注意,开放组sh语言规范规定:“只有ISO C标准第6.4.4.1节中规定的十进制常量、八进制常量和十六进制常量才需要识别为常量。”我认为N#符号是一种巴什主义。