【问题标题】:What is the story behind ${#} in bashbash 中 ${#} 背后的故事是什么
【发布时间】:2015-02-23 11:20:19
【问题描述】:

我在 bash 4.1.2 中遇到了两个字符串的字符串长度操作

第一:1000000000000000000

developer@kernel ~> echo ${#1000000000000000000}
0
developer@kernel ~> s1=1000000000000000000
developer@kernel ~> echo ${#s1}
19

二:10000000000000000000

developer@kernel ~> echo ${#10000000000000000000}
19
developer@kernel ~> s2=10000000000000000000
developer@kernel ~> echo ${#s2}
20

如何解释那些奇怪的行为?

【问题讨论】:

    标签: string bash string-length


    【解决方案1】:

    ${#var} 通常是${var} 的字符长度。所以${#1000000000000000000} 是脚本的第 1000000000000000000 个参数的长度。由于没有使用那么多参数调用您的脚本,因此这是零。

    显然位置参数的数量是有限制的,当您尝试引用超出此限制的参数时,结果是不可预测的,并且因系统而异。分界线好像是${#9223372036854775808},也就是264

    【讨论】:

    • 但是10000000000000000000的长度是20,为什么${#10000000000000000000}变成19?
    • @hylepo 我得到了 20 echo ${#10000000000000000000}
    • @BallPython echo ${0} 返回什么?多长时间?
    • @Barmar,你注意到你的 bash 的版本号是多少了吗?
    • ${#9223372036854775807} 是 0。${#9223372036854775808} 是 18。上限是 2**63-1(至少在我的系统上)。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2023-02-11
    • 2015-05-31
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多