2012-06-08 3 views
0

을 추가하려면 에 대한. grep의 첫 번째 인스턴스는이 문자열의 인스턴스 하나를 예상대로 반환합니다.문제는 내가 예상 한대로 작동하지 않는 간단한 스크립트가의 crontab 파일

그러나 echo $CRONCONT 인스턴스는 * * * * *과 함께 여러 가지로 대체됩니다. 여기에는 스크립트가 실행되는 디렉토리의 내용이 포함되지만 그 위치를 즉시 알지 못하는 많은 다른 것들도 포함됩니다.

내 cronfile에서 * * * * *을 제거하면 문제가 사라지지만 * * * * *과 함께 작동하지 않아야하는 이유를 알 수 없습니다.

답변

2

기본적으로 한 가지 문제는 *grep의 메타 문자입니다. *을 검색하려면 \*처럼 인용해야합니다. 패턴이 효과가 있었던 이유를 보려면 this comment by chepner을 참조하십시오.

또는 fgrepgrep 명령 (정확한 문자열을 검색 대체합니다.

다른 문제는, 당신이해야하므로 echo "${YOURVARIABLE}".

+0

감사를 *는, 쉘 확장을위한 메타 문자입니다,하지만이 이미 내 문제를 해결하지 않았다. 이미 \\ * 및 fgrep 시도하고 차이를 만들지 않습니다. 또한 grep의 첫 번째 인스턴스가 올바르게 작동합니다. 또한/tmp/grep에서 *를 제거하지 않으면 grep에서 *를 제거하지 마십시오. 문제가 남아 있습니다. 마지막 점을 이해하지 못했습니다. 약간 확장 할 수 있습니까? 고맙습니다. lp. – user1445163

+1

'$ CRONCOUNT'는 별표를 포함하는 문자열을 포함하기 때문에,'echo $ CRONCONT'는'echo * * * */usr/loca ... '로 먼저 확장되고 쉘에 의해 실행되어 별표를 해석합니다 글로브로. 'echo "$ CRONCONT"'를 사용하면'$ CRONCONT'의 확장 된 값이'echo' 명령에 의해 사용되기 전에 인용됩니다. – chepner

+1

그런데 패턴은'grep'과 함께 작동합니다.'*'* 패턴이 시작될 때 정규 표현식 연산자 (다른 문자를 따라야 함) 대신에 리터럴 "*"로 취급되기 때문입니다. – chepner

관련 문제