在Bash中创建带尾随空格的字符串

时间:2012-01-12 10:34:57

标签: string bash formatting whitespace

我想循环一个关联数组并以一种很好的方式打印出键/值对。因此,我想以这样的方式缩进这些值,它们都从各自键后面的相同位置开始。

以下是一个例子:

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

使用printf代替echo。您将获得格式化的所有功能,例如: %30s表示30个字符的字段。