変数に格納されている値をgrepする方法[閉じる]

変数に格納されている値をgrepする方法[閉じる]

現在の日付を変数に保存してから変数を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'

一重引用符がないと、上記のメッセージが正しく出力されません。

関連情報