我想循环一个关联数组并以一种很好的方式打印出键/值对。因此,我想以这样的方式缩进这些值,它们都从各自键后面的相同位置开始。
以下是一个例子:
declare -A my_array
my_array["k 1"]="value one"
my_array["key two"]="value two"
for key in "${!my_array[@]}"; do
echo "$key: ${my_array[$key]}"
done
输出
k 1: value one
key two: value two
我想要的输出是(对于任意密钥长度):
k 1: value one
key two: value two
答案 0 :(得分:4)
如果你的系统有,可以使用printf
:
printf "%20s: %s" "$key" "${my_array[$key]}"
这会将最大密钥长度硬编码为20,但您当然可以添加迭代密钥的代码,计算最大值,然后使用它来构建printf
格式化字符串。
答案 1 :(得分:1)
使用printf
代替echo
。您将获得格式化的所有功能,例如: %30s
表示30个字符的字段。