2011-05-14 36 views
6

Tôi có một tập lệnh kiểm tra xem tệp có cập nhật không.so sánh các chuỗi trong bash

updatedate=`ls -l file | sed -e 's/ */ /g' | cut -d' ' -f7` #cut the modification time 
nowdate=`date +"%H:%M"` 
echo "$updatedate $nowdate" 
if [ "$updatedate"="$nowdate" ] 
then 
    echo 'OK' 
else 
    echo 'NOT OK' 
fi 

Nhưng khi tôi chạy nó, so sánh luôn là đúng:

$ ./checkfile 
10:04 10:07 
OK 

$ ./checkfile 
10:07 10:07 
OK 

Tại sao?

Trả lời

15

Bạn cần một khoảng trống ở mỗi bên của dấu bằng.


if [ "$updatedate" = "$nowdate" ] 
2

Bạn cần tách riêng tất cả các đối số thành test bằng khoảng trắng. Vì nó đứng bạn có = phải lên chống lại hai toán hạng của nó vì vậy test thấy một đối số, không phải là một đối số mà bạn dự định.

+1

[viết tắt để kiểm tra, xem http://pubs.opengroup.org/onlinepubs/009695399/utilities/test.html (nhận xét đó dành cho OP);) –