서브 쉘에서 ls * .txt를 사용할 수없는 이유는 무엇입니까?


13
~$ echo $(ls)  
arguments.txt cecho.sh Desktop Documents Downloads example.txt Music Pictures Public     
~$ echo $(ls "*.txt")  
ls: cannot access *.txt: No such file or directory  

두 번째 서브 쉘 명령이 실패하는 이유는 무엇입니까?

답변:


27

따옴표를 제거하면 *.txt제대로 작동합니다. 따옴표로 쉘은 리터럴 filename을 찾습니다 *.txt. 탐색 / 실험하려면 이름 *.txt을 가진 파일을 작성 touch '*.txt'하고 명령을 반복하십시오.


6
큰 따옴표 (적어도 bash비슷한 셸과 같은 zsh따옴표)는 작은 따옴표와 같지 않습니다! 예를 들어, 매개 변수 확장 ( $foo)은 큰 따옴표 안에 있지만 작은 따옴표는 아닙니다.
Blacklight Shining

30

ls "*.txt"일반 셸에서 실행할 수없는 것과 같은 방식 으로 하위 셸에서도 실행할 수 없습니다. *.txt따옴표 를 넣을 때 대신 수행해야 할 때라 ls는 리터럴 파일을 검색 *.txt했습니다.

$ echo $(ls *.txt) # => file.txt otherfile.txt

이를 수행하는 더 좋은 방법은 전혀 사용하지 않는 것 ls입니다.

$ echo *.txt # => file.txt otherfile.txt

7
중복 제거를 위해 +1 ls.
Blacklight Shining

3
Nitpicking : 당신 실행할 있습니다 ls -l "*.txt". 아니면 적어도 할 수 있습니다. 자주하지는 않지만, 일반적으로 * .txt를 찾을 수 없다는 메시지가 표시됩니다.
Ingo

@lngo : 그것은 OP의 게시물에도 있습니다
Brian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.