Bash: 是否有内置的方法来获取关联数组中键的最大长度
Bash: Is there a built-in way to get the maximum length of the keys in an associative array
在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
$
我可以使用下面的一行代码得到它
$ vSpacePad=`for keys in "${!myArray[@]}"; do echo $keys; done | awk '{print length, [=12=]}' | sort -nr | head -1 | awk '{print }'`;
$ echo $vSpacePad
8
$
我正在寻找像下面这样更简单的东西,但不幸的是,这些只是给出了数组中的项目数。
$ echo "${#myArray[@]}"
3
$ echo "${#myArray[*]}"
3
您确实需要循环键,但不需要任何外部工具:
max=-1
for key in "${!myArray[@]}"; do
len=${#key}
((len > max)) && max=$len
done
echo $max # => 8
如果您想每行打印一个数组的元素,则不需要循环:printf
是您的朋友:
printf '%s\n' "${!myArray[@]}"
printf
迭代直到所有参数都被消耗
Is there a built-in way to get the maximum length of the keys in an associative array
没有
how do I find the length of the longest key?
遍历数组元素,获取元素长度并保留最大数。
不要使用反引号`。请改用 $(..)
。
引用变量扩展 - 不要 echo $keys
,请 echo "$keys"
。更喜欢 printf
而不是 echo
.
如果数组元素没有换行符和其他可疑字符,您可以:
printf "%s\n" "${myArray[@]}" | wc -L
在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
$
我可以使用下面的一行代码得到它
$ vSpacePad=`for keys in "${!myArray[@]}"; do echo $keys; done | awk '{print length, [=12=]}' | sort -nr | head -1 | awk '{print }'`;
$ echo $vSpacePad
8
$
我正在寻找像下面这样更简单的东西,但不幸的是,这些只是给出了数组中的项目数。
$ echo "${#myArray[@]}"
3
$ echo "${#myArray[*]}"
3
您确实需要循环键,但不需要任何外部工具:
max=-1
for key in "${!myArray[@]}"; do
len=${#key}
((len > max)) && max=$len
done
echo $max # => 8
如果您想每行打印一个数组的元素,则不需要循环:printf
是您的朋友:
printf '%s\n' "${!myArray[@]}"
printf
迭代直到所有参数都被消耗
Is there a built-in way to get the maximum length of the keys in an associative array
没有
how do I find the length of the longest key?
遍历数组元素,获取元素长度并保留最大数。
不要使用反引号`。请改用 $(..)
。
引用变量扩展 - 不要 echo $keys
,请 echo "$keys"
。更喜欢 printf
而不是 echo
.
如果数组元素没有换行符和其他可疑字符,您可以:
printf "%s\n" "${myArray[@]}" | wc -L