ソフトウェアエンジニア現役続行

雑多なことを綴ります

シェルスクリプトで、空白で詰めない

シェルスクリプトでは、空白は詰められてしまいます。
ダブルクォーテーションで囲むと、空白は詰められなくなります。

[Oswald@fedora ~]$ string="a      b"
[Oswald@fedora ~]$ echo $string
a b (←空白を詰める)
[Oswald@fedora ~]$ echo "$string"
a      b (←空白を詰めない)

簡単なことなのに、昨日はどうやったら空白を詰めなくなるのか分からなくて、散々ネットで調べ続けました。

ちなみに何がやりたかったのかというと、/var/log/messagesの中の前日分だけを抽出したかったのです。以下のように$strをダブルクォーテーションで囲むとうまくいきます。

[Oswald@fedora ~]$ vi /usr/local/bin/get_syslog_yesterday.sh
#!/bin/bash
str=$(date +"%b %_d" -d '1 days ago')
grep "$str" /var/log/messages

シェルスクリプトの作法は特殊だから、よくハマります・・・。