`find. -name *foo*`는 어떻게 작동하나요?

`find. -name *foo*`는 어떻게 작동하나요?

*명령의 와일드카드가 bash로 대체된 것 같지만 현재 디렉터리의 항목과 일치하지 find . -name *foo*않는 한 명령이 작동합니다 . *foo*이것은 매우 혼란스럽습니다.

답변1

Bash가 일치하는 항목을 찾을 수 없으면 확장되지 않은 s를 사용하여 리터럴 문자열을 애플리케이션에 전달합니다 *. 예를 들어:

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test *foo*
foo

$ /tmp/test *bar*
*bar*

bash*foo*일치로 인해 확장되지만 *bar*불일치로 인해 통과됩니다. 이 nullglob옵션은 bash가 일치하지 않는 패턴을 빈 문자열로 구문 분석하도록 지시합니다.

$ shopt -s nullglob
$ /tmp/test *bar*

$

답변2

확장되지 않은 문자열을 얻으 려면 find따옴표로 묶거나 백슬래시로 와일드카드를 보호하면 됩니다.

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test '*foo*'
*foo*

$ /tmp/test \*foo\*
*foo*

관련 정보