シェルスクリプトで、空白で詰めない
シェルスクリプトでは、空白は詰められてしまいます。
ダブルクォーテーションで囲むと、空白は詰められなくなります。
[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
シェルスクリプトの作法は特殊だから、よくハマります・・・。