다음 내용(또는 이와 유사한 내용)이 포함된 파일이 있습니다.
# cat /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
다음과 같이 일치시켜 항목이 존재하는지 확인하려고합니다.
# grep --fixed-string "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/" /var/www/htpasswd
#
하지만 아무것도 일치하지 않습니다. 이유 및/또는 방법에 대한 아이디어가 있습니까?
처음에는 달러 기호인 줄 알았는데 다음과 같이 작동합니다.
# grep --fixed-string "foo:$ap" /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
#
답변1
작은따옴표(')를 사용하면 $nnn이 변수로 처리되지 않습니다. "가 있는 문자열은 삽입된 문자열이고, '가 있는 문자열은 삽입되지 않습니다.
문자열 앞에 echo를 추가할 때 출력을 살펴보세요.
$ echo "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/"
foo:3wJ8tiQ/
$ echo 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/'
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
답변2
다음과 같이 작은따옴표를 사용하세요.
grep 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /vaw/www/htpasswd
답변3
grep이 도착하기 전에 쉘이 결과를 해석하는 문제를 방지하려면 --fixed-strings 인수에 큰따옴표 대신 작은따옴표를 사용해야 합니다. https://stackoverflow.com/questions/6697753/difference- Between-single-and-double-quotes-in-bash
grep --fixed-string 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /var/www/htpasswd