2013-04-26 2 views
1

한 줄의 결과가 나오는 파일에 grep을 수행하고 있습니다. 이 출력에는 * 데이터가 있습니다. 셸 스크립트에서 변수에 값을 지정하려고하는데 *가 현재 폴더의 파일 목록으로 바뀝니다.*가 현재 폴더 파일 목록으로 바뀌고 있습니다.

예 : 내 스크립트 이름은 script1.sh이고 다른 파일은 script2.sh이며 같은 디렉토리에 있습니다.

스크립트의 내용은

VAR1=`grep pattern search_file` 
echo $VAR1 

가 의도 된 출력 * 패턴은

하지만 무엇입니까 출력이

입니다 것입니다

패턴은 s입니다. cript1.sh script2.sh

내가 잘못하고있는 것이 무엇인지 알리고 싶습니다.

+0

나는 이것을 프롬프트에서 시도했다. VAR ='echo "*"' echo $ VAR로 인해 위와 동일한 문제가 발생합니다. – vcosk

답변

1

사용 set -f 쉘 옵션은 서브 쉘 및 대화 형 세션에 글 로빙 비활성화됩니다. set +f을 사용하면 다시 globbing을 사용할 수 있습니다. echo "$VAR1" 당신이 bash shell expansions의 순서를 보면

, 당신은 그 파일 이름 확장 매개 변수 확장을 발생 알 수 있습니다 :

+0

그것은 작동했습니다 : D 감사합니다 – vcosk

+1

이것은 물이 새는 수도꼭지가있어서 메인을 막는 것과 같습니다. 효과적이고 지나치게 광범위합니다. – chepner

1

*와 \를 이스케이프 처리해야합니다. 그렇지 않으면 현재 디렉토리의 파일 이름과 일치하는 와일드 카드로 처리합니다.

\* 
+1

'*'를 통해 파일에서 읽히기 때문에'*'를 벗어날 기회가 적습니다. – chepner

3

당신은 단순히 변수를 인용 할 필요가있다. 따옴표없이 변수는 단어 분할 및 파일 이름 확장에 종속됩니다.

관련 문제