2012-01-12 104 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個字符的字段。