현재 날짜를 변수에 저장한 다음 변수를 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'
작은따옴표가 없으면 위 메시지가 올바르게 출력되지 않습니다.