언제, 왜 별표를 인용해야 합니까?

언제, 왜 별표를 인용해야 합니까?

나는 Linux/Bash에서 큰따옴표가 필요한 시기와 이유에 대한 규칙을 완전히 이해한 적이 없다고 생각합니다(이 질문의 도메인이 Linux, Bash 또는 다른 것인지 확실하지 않습니다). *나는 문자 수에 상관없이 (없음을 포함하여) 일치한다고 생각합니다 .위키피디아 기사. 그러나 다음과 같이 와일드카드를 사용하려고 하면 *이해할 수 없는 결과가 나타납니다.

>pwd
/home/user/foo/foo/test
>tree 
.
├─ main.opp
└─ test
   └─ test.opp

>find ../ -name *.opp
../test/test.opp

>find ../ -name "*.opp"
../main.opp
../test/test.opp

>cd ..
>pwd
/home/user/foo/foo

>find . -name *.opp
./main.opp

>find . -name "*.opp"
./main.opp
./test/test.opp

find큰따옴표가 아닌 *.opp매개변수를 사용하면 하나의 적중만 반환되는 반면, 동일한 매개변수를 큰따옴표로 사용하면 예상되는 두 개의 적중이 반환되는 이유는 무엇입니까 ?

답변1

확장이 평가되는 시기에 따라 다릅니다. 별표를 인용하지 않으면 bash가 먼저 별표를 평가합니다. 를 호출하는 것과 동일합니다 find . -name main.opp. 별표를 인용하면 어느 것이 예상한 방식으로 사용되는지 찾기 위해 있는 그대로 전달됩니다.

답변2

따옴표가 없으면 bash는 현재 디렉터리에 일치하는 파일이 있으면 별표를 확장합니다. 여기서는 echo확장을 디버깅 하는 데 사용합니다 .

~/foo/foo/test$ echo find ../ -name *.oop
find ../ -name test.oop
~/foo/foo/test$ cd ..
~/foo/foo$ echo find . -name *.oop
find . -name main.oop

당신이 찾고 있는 것이 맞는다면일치하는 항목이 없습니다.현재 디렉터리에서는 확장되지 않습니다.

~/foo/foo$ echo find . -name test.*
find . -name test.*
~/foo/foo$ find . -name test.*
./test/test.oop

관련 정보