2012-01-12 95 views
1

我想遍历一个关联数组并以良好的方式打印出键/值对。因此,我希望以这种方式缩进这些值,以使它们都始于相应键的相同位置。在Bash中创建带尾随空格的字符串

下面是一个例子:

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 

回答

4

你可以使用printf,如果你的系统有:

printf "%20s: %s" "$key" "${my_array[$key]}" 

这会将最大密钥长度硬编码为20,但您当然可以添加遍历密钥的代码,计算最大值,然后使用它构建printf格式化字符串。

+0

谢谢,这是工作!我用printf格式化了前导0的数字,但没有考虑将它用于尾随空格。 – 2012-01-12 10:43:54

1

使用printf而不是echo。您将获得格式化的所有功能,例如%30s为30个字符的字段。