Bash:是否有内置方法来获取关联数组中键的最大长度

1 arrays bash associative max maxlength

在 Bash 中,给定一个关联数组,如何找到最长键的长度?

比如说,我声明myArray如下:

$  declare -A myArray=([zero]=nothing [one]='just one' [multiple]='many many')
$  echo ${myArray[zero]}
nothing
$  echo ${myArray[one]}
just one
$  echo ${myArray[multiple]}
many many
$
Run Code Online (Sandbox Code Playgroud)

我可以使用下面的一行得到它

$  vSpacePad=`for keys in "${!myArray[@]}"; do echo $keys; done | awk '{print length, $0}' | sort -nr | head -1 | awk '{print $1}'`;
$  echo $vSpacePad
8
$
Run Code Online (Sandbox Code Playgroud)

我正在寻找像下面这样更简单的东西,但不幸的是,这些只是给出了数组中的项目数。

$  echo "${#myArray[@]}"
3
$  echo "${#myArray[*]}"
3
Run Code Online (Sandbox Code Playgroud)

gle*_*man 8

您确实需要循环按键,但不需要任何外部工具:

max=-1
for key in "${!myArray[@]}"; do
  len=${#key}
  ((len > max)) && max=$len
done
echo $max    # => 8
Run Code Online (Sandbox Code Playgroud)

如果您想每行打印一个数组的元素,则不需要循环:printf是您的朋友吗:

printf '%s\n' "${!myArray[@]}"
Run Code Online (Sandbox Code Playgroud)

printf迭代直到消耗完所有参数