쉘 스크립트를 보다가 다음 줄을 발견했습니다.
ls $dir | grep -c "$NAME.${var}\$"
이것이 sum $
변수를 확장한다는 것을 알고 있지만 끝에 있어야 합니까 ?NAME
var
\$
답변1
grep
문자열을 "$NAME.${var}\$"
정규식으로 사용합니다. 아마도 문제가 되는 코드 행 앞에 쉘 변수 name
sum var
에 값이 할당되어 쉘이 스크립트 값 $NAME
sum 을 해석하게 될 것입니다 ${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으로 끝나는 파일만 인쇄됩니다.