사례 시나리오:
$ echo "1,2,4" | grep -v [0-9]
[No results, as expected]
그러나 다음을 통해 완료되면 cron
:
$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v [0-9] > /tmp/debug.dump
[...]
$ cat debug.dump
1,2,4
해결 방법(혹은 해결 방법이 있을지 모르겠습니다.):
$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v "[0-9]" > /tmp/debug.dump
[...]
$ cat debug.dump
[No results, as expected]
나는 문제를 해결하고 잊어버리는 것이 아니라 문제를 이해하고 싶습니다.
큰따옴표가 이 문제를 해결하는 이유는 무엇입니까?
참고: 이는 FreeBSD v10.3입니다.
답변1
이 cron 작업을 실행하는 사용자의 홈 디렉터리에는 0, 3, 5, 6, 7, 8 또는 9라는 파일이 있습니다. 쉘은 따옴표가 없는 [0-9]
인수를 해당 파일 이름으로 확장합니다( 이라고 가정 0
). 0
입력에 '가 없기 때문에 grep -v
"성공"하고 아무것도 인쇄하지 않습니다.
테스트할 때 다른 디렉터리(한 자리 숫자의 파일 이름이 없는 디렉터리)에 있습니다. 큰따옴표(또는 작은따옴표) 인수는 쉘이 glob을 확장하는 것을 방지하여 grep이 이를 범위로 처리할 수 있도록 합니다.