tcsh grep 문제

tcsh grep 문제

나는 FreeBSD를 사용한다

> uname -sr
FreeBSD 6.3-RELEASE

내가 쿼리할 때

> grep `whoami` /etc/passwd

내가 원하는 정보가 표시됩니다.

여기에 이미지 설명을 입력하세요.

하지만 tcsh 스크립트에 넣으려고 하면 다음과 같습니다.

#!/bin/tcsh
set login = `whoami`
echo $login

set query = `grep $login /etc/passwd`
echo $query

이는 나에게 다음 사항을 제공합니다.

dolg_gr
echo: No match.

왜 "일치하지 않습니까"? $query 변수의 명령 셸에서 제공되는 문자열을 어떻게 얻나요?

답변1

그건 문제가 아닙니다 grep. 인용되지 않은 변수 확장에 문제가 있습니다.

echo $query

grep그리고 반환된 일치하는 행에 와일드카드 문자가 포함되어 있다는 사실 *. 에서 tcsh실패한 glob의 기본 동작은 bash의 failglob옵션과 유사합니다. 오류는 glob이 없음을 알려줍니다.파일 이름 일치비밀번호 문자열의 경우:

$ tcsh -c 'echo dol_gr:*:3291'
echo: No match.

스테판 차젤라스(Stéphane Chazelas)가 언급했듯이, (t)csh에서 변수 확장을 참조하는 올바른 방법은 modifiers 를 사용하는 것입니다 q. 또한 인용되지 않은 경우 SPC, TAB 및 NL에서 분할이 tcsh발생 하지만 인용된 경우 NL에서만 발생합니다.`...`

set query = "`grep $login:q /etc/passwd`"
echo $query:q

관련 정보