【问题标题】:How to get the size of the second dimension of two dimensional arrays in bash?如何在bash中获取二维数组的第二维大小?
【发布时间】:2015-07-07 16:25:16
【问题描述】:

如果我有

arr[0,0]=0;
arr[0,1]=1;

我试试

echo ${#arr[0,@]}

我明白了

bash: 0,@: syntax error: operand expected (error token is "@")

获取第二维或arr的大小的正确方法是什么?

【问题讨论】:

  • 不是字符串键;索引在算术上下文中进行评估,其中支持逗号运算符
  • 鉴于错误,这是算术上下文。如果没有它,这可能是一个关联数组,在这种情况下 anubhava 是正确的。

标签: linux bash shell


【解决方案1】:

BASH 不支持多维数组。
不过,您可以使用各种 techniques 模拟它们。

以下定义相同:

  • arr[1,10]=anything
  • arr["1,10"]=anything

两者都被评估为arr[10]=anything (感谢chepner

echo ${arr[10]}
anything

【讨论】:

  • 那为什么定义arr[0,0]=0是合法的?
  • 因为0,0 是一个合法的算术表达式,其计算结果为 0。(逗号运算符返回第二个表达式的值。)
  • @OneZero 对于关联数组,它意味着字符串键"0,0"
  • 虽然我知道有很多方法可以模拟它们,但我该如何处理尺寸问题呢?如果0,0 被解释为一个完整的字符串,是否意味着我无法获得第二维的大小?
  • @OneZero:如果我需要二维数组,我会从 bash 切换到原生支持它们的语言。
【解决方案2】:

Bash 没有多维数组。除非您已将 arr 变量声明为关联数组,否则您正在尝试执行的操作甚至不会模拟多维数组。查看以下测试:

#!/bin/bash
arr[0,0]=0
arr[0,1]=1
arr[1,0]=2
arr[1,1]=3
echo "${arr[0,0]} ${arr[0,1]}" # will print 2 3 not 0 1
unset arr
declare -A arr
arr[0,0]=0
arr[0,1]=1
arr[1,0]=2
arr[1,1]=3
echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1

而你只能通过${arr[@]}获得整体尺寸

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2020-01-18
    相关资源
    最近更新 更多