grep에 전달된 변수 이름 끝에 \$를 사용하십시오.

grep에 전달된 변수 이름 끝에 \$를 사용하십시오.

쉘 스크립트를 보다가 다음 줄을 발견했습니다.

ls $dir | grep -c "$NAME.${var}\$"

이것이 sum $변수를 확장한다는 것을 알고 있지만 끝에 있어야 합니까 ?NAMEvar\$

답변1

grep문자열을 "$NAME.${var}\$"정규식으로 사용합니다. 아마도 문제가 되는 코드 행 앞에 쉘 변수 namesum var에 값이 할당되어 쉘이 스크립트 값 $NAMEsum 을 해석하게 될 것입니다 ${var}. 정규식의 마지막 "$"는 백슬래시로 이스케이프되므로 스크립트를 해석하는 쉘은 쉘 변수의 값을 삽입하려고 시도하지 않습니다. "$"는 grep정규식의 일부로 전달됩니다. 실제로 "$"는 grep정규식의 맥락에서 특별한 의미를 갖습니다. "$"는 "줄 끝"을 의미합니다 grep. 요청한 의미 외에는 grep마지막 "$"가 필요하지 않습니다 .

답변2

결과는 다음과 같습니다. john, alex_john, alex_john1 및 john1이라는 디렉터리에 파일을 생성하고 다음을 수행한다고 가정해 보겠습니다.

[root@localhost ~]# ls | grep "john"
john
alex_john
alex_john1
john1
[root@localhost ~]# ls | grep "john\$"   <==here it would insert end of line
john
alex_john
[root@localhost ~]#  

따라서 두 번째 grep의 경우 john으로 끝나는 파일만 인쇄됩니다.

관련 정보