現在の日付を変数に保存してから変数をgrepするbashスクリプトを作成しています。問題はそれがうまくいかないということです
currentdate= $(date +%b\ %d)
echo "$currentdate"
last |grep -E '$currentdate'>> /usr/IBM/HTTPServer7/logs/alert/users.txt
users.txt
空白としてマークされます。現在の日付を手動で書くと機能します。私は何が間違っていましたか?
答え1
引用符に加えて、last
次のようにコマンドで使用される日付形式も考慮する必要があります。
Dec 3 # Note the padding to the left of '3'.
Nov 23
これには少し異なる日付コマンドが必要です。
date "+%b %_d"
Dec 4
下線は、フィールドdate
にスペースを埋める必要があることを示します。代わりに%eを使用することもできます。
これをまとめると、次のようにスクリプトを変更できます。
currentdate=$(date "+%b %_d")
last | grep "$currentdate" >> /usr/IBM/HTTPServer7/logs/alert/users.txt
答え2
@Sparhawk そうなんですね。
二重引用符のため、シェルは変数を拡張します。
$ VAR=blahblah
$ echo "$VAR"
blahblah
一重引用符のため、シェルはテキストを文字通り使用します。
$ VAR=blahblah
$ echo '$VAR'
$VAR
シェルがドル記号とは異なるテキストを変数として扱うのを防ぐ場合は、このオプションを使用できます。
echo 'This script is terminating because you didn't set $IMPORTANT_VARIABLE'
一重引用符がないと、上記のメッセージが正しく出力されません。