Shell 壳#内(())
我对壳牌公司不熟悉。我不太理解下面的函数。此功能基本上将小时数增加1 我想知道为什么开发者在$g_current_hour+1前面加上“10”。据我理解,shell中的dose#是指评论吗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,其中可选的基数是介于
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#符号是一种巴什主义。