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
Arrays 在bash中解释数组长度的${#arrayname[@]}语法?_Arrays_Bash_Syntax - Fatal编程技术网

Arrays 在bash中解释数组长度的${#arrayname[@]}语法?

Arrays 在bash中解释数组长度的${#arrayname[@]}语法?,arrays,bash,syntax,Arrays,Bash,Syntax,我知道在bash中可以通过执行${{arrayname[@]}来获得数组的长度 我的问题是:这只是我必须记住的东西,还是这个语法可以分解成可以理解的部分?例如,@符号表示在哪里可以找到索引?为什么“@”的作用方式与“*”相同。它没有提供具体的索引,而是引用了完整的内容 “#”告诉bash您需要长度 在表单${#PARAMETER}的一般用法中返回参数值的长度(以字符为单位,而不是以字节为单位) myString="Hello StackOverflow!" printf "%s\n" "${#m

我知道在bash中可以通过执行
${{arrayname[@]}
来获得数组的长度


我的问题是:这只是我必须记住的东西,还是这个语法可以分解成可以理解的部分?例如,
@
符号表示在哪里可以找到索引?为什么“@”的作用方式与“*”相同。它没有提供具体的索引,而是引用了完整的内容

“#”告诉bash您需要长度


在表单
${#PARAMETER}的一般用法中
返回参数值的长度(以字符为单位,而不是以字节为单位)

myString="Hello StackOverflow!"
printf "%s\n" "${#myString}"
20
但对于阵列,此扩展类型有两种含义:

  • 对于单个元素,它报告元素的字符串长度 (对于每个“正常”参数)
  • 对于质量下标
    @
    *
    它 报告数组中集合元素的数量
  • 以数组为例

    myArray=(1 2 3 4 15)
    printf "%s\n" "${myArray[@]}"    # <-- Gives me list of elements 
    1
    2
    3
    4
    15
    printf "%s\n" "${#myArray[@]}"   # <-- Gives me number of elements
    5
    
    #
    在变量引用的开头表示获取变量值的长度。对于普通变量,这表示其长度(以字符为单位)
    #
    是“number”符号,因此您可以记住它的意思是“变量中的事物数”

    数组索引中的
    @
    *
    意味着使用整个数组,而不是特定的元素,它返回的不是字符数,而是数组元素数<代码>*在许多上下文中用作通配符,因此这应该很容易记住。另外,
    $*
    $@
    用于表示shell脚本的所有参数,因此与所有数组元素的并行性应该是显而易见的

    不能只写
    ${#arrayname}
    ,因为当使用不带下标的数组变量时,它相当于数组的元素
    0
    。因此
    ${arrayname}
    ${{arrayname[0]}
    相同,后者是数组第一个元素中的字符数。

    您应该记住:)
    #
    通常表示数字。e、 g.会议

    • $#
      -是参数的数目
    • ${#str}
      -字符串的长度
      $str
    • ${#arr[@]}
      -数组的长度(元素数)
      arr
    • ${#arr}
      -数组第一个元素的长度(如上面的
      str
    不幸的是,
    ${parameter#word}
    ${parameter##word}
    与数字无关。(它从
    参数的开头删除最短/最长的
    单词

    而且,
    #..
    是注释;)

    printf "%s\n" "${#myArray[4]}"
    2