*
명령의 와일드카드가 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*