String bash中${#}背后的故事是什么

String bash中${#}背后的故事是什么,string,bash,string-length,String,Bash,String Length,我在Bash4.1.2中遇到了两个字符串的字符串长度操作 第一个:10000000000000000000000 developer@kernel ~> echo ${#1000000000000000000} 0 developer@kernel ~> s1=1000000000000000000 developer@kernel ~> echo ${#s1} 19 developer@kernel ~> echo ${#10000000000000000000} 1

我在Bash4.1.2中遇到了两个字符串的字符串长度操作

第一个:
10000000000000000000000

developer@kernel ~> echo ${#1000000000000000000}
0
developer@kernel ~> s1=1000000000000000000
developer@kernel ~> echo ${#s1}
19
developer@kernel ~> echo ${#10000000000000000000}
19
developer@kernel ~> s2=10000000000000000000
developer@kernel ~> echo ${#s2}
20
第二个:
100000000000000000

developer@kernel ~> echo ${#1000000000000000000}
0
developer@kernel ~> s1=1000000000000000000
developer@kernel ~> echo ${#s1}
19
developer@kernel ~> echo ${#10000000000000000000}
19
developer@kernel ~> s2=10000000000000000000
developer@kernel ~> echo ${#s2}
20
如何解释这些奇怪的行为?

${var}
通常是
${var}
的字符长度。因此,
${10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000。因为调用脚本时没有使用那么多参数,所以这是零


显然,位置参数的数量是有限制的,当您尝试引用超出此限制的参数时,结果是不可预测的,并且因系统而异。分界线似乎是264,但是100000000000000000的长度是20,为什么${100000000000000000}会变成19?@hylepo我得到20是因为
echo${100000000000000000}
@BallPython
echo${0}
返回什么?多长时间了?@Barmar,你注意到你的bash的版本号了吗?
${9223372036854775807}
是0<代码>${9223372036854775808}
是18。上限为2**63-1(至少在我的系统上)。