나는 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