2012-01-12 13 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

ありがとうございました!先行する0の数字を書式設定するためにprintfを使用しましたが、末尾の空白にもそれを使用することは考えていませんでした。 –

1

echoの代わりにprintfを使用してください。書式設定のすべての機能を利用できます。 %30sは30文字のフィールドです。

関連する問題