echo で出力した文字列の中の連続するスペースが 1 つのスペースになってしまうのを防ぐ

Linux の echo コマンドで文字列変数 $str の値を出力しようとして、下記のように実行すると、文字列に含まれている連続するスペースが 1 つのスペースにまとめられてしまいます。

sample.sh(間違った方法)
#!/bin/bash

str="AAA   BBB   CCC"
echo $str
実行結果
AAA BBB CCC

これは、変数展開が行われることによってダブルクォートが取り除かれ、下記のように echo コマンドに 3 つのパラメータが渡されたものとして扱われるからです。 パラメータの区切りとして使われるスペースの数は関係なく、各パラメータ (AAABBBCCC) が 1 つのスペースで結合されて出力されます。

$ echo AAA   BBB   CCC
AAA BBB CCC

スペースを含む文字列を 1 つの文字列として echo コマンドに渡すには、次のようにダブルクォートで囲む必要があります。

sample.sh(正しい方法)
#!/bin/bash

str="AAA   BBB   CCC"
echo "$str"
実行結果
AAA   BBB   CCC