변수에 저장된 값을 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'

작은따옴표가 없으면 위 메시지가 올바르게 출력되지 않습니다.

관련 정보