껍질의 특징을 움켜 쥐고 있습니까?


12

나는 이것이것 과 같은 많은 질문과 답변을 읽습니다.

명령을 실행하기 전에 셸에서 와일드 카드를 확장했으며 셸의 기능이라는 것을 알고 있습니다. 또한 와일드 카드는 많은 인수를 허용 할 수있는 명령과 함께 작동합니다. 에서 find . -name *.rb 우리는 현재 디렉토리에있는 하나 개 이상의 파일이있는 경우 find발견 여러 인자와이있는 해결 방법을 받아 들일 수 없기 때문에 우리에게 오류를 줄 것이다 :

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

별표에서 벗어나 쉘의 확장을 방지하지만 와일드 카드는 쉘의 기능입니다. 별표 셸을 탈출하면 그 의미를 알지 못하고이라는 파일을 찾아야 *.rb하므로이 경우 별표가 어떻게 확장됩니까?

답변:


21

예, 쉘 *은 디렉토리에 문자가있는 *.rb모든 파일과 문자가 있고 끝나는 모든 파일로 이해 .rb하여 확장합니다.

find명령 자체는 globbing을 받아들입니다.

당신이 인용하지 않으면 *다음 쉘은 그것을 확장됩니다 전에find 명령을 인수, 그래서 대신 글로브 볼 *.rb에 전달 find, 전달 될 디렉토리에있는 글로브 일치하는 모든 파일의 이름을 find, 그리고 find그 해석을 시도합니다 인수로, 오류가 발생하거나 적어도 원하는 결과가 아닐 수 있습니다 (현재 디렉토리에 일치하는 파일이없는 경우에만 올바르게 작동 함)


고맙습니다, 그것은 우리가 그것을 glob가 아니라는 말을 의미하지만 일부 명령은 와일드 카드를 확장 할 수 있습니까? 또는 우리가 명령을 globbing하는 것에 대해 이해하지 않고 쉘을 가지고 있다면 globbing에 대해 알고 있으면 명령을 확장 할 수 있습니까?
Sinoosh

5
이 경우 *항상 인용해야 정규식을 허용하는 명령 ...에 대한 동일합니다 - 인용, 다음 쉘은 확장되지 않으며 글로브를 포함한 인수는 글로브를 이해할 수있는 명령에 전달
ZANNA을

1
나의 기쁨 ^ _ ^
Zanna

7
@Sinoosh : 모든 명령이 glob 구문을 이해하는 것은 아닙니다. 단지의 특징 될 일find
slebetman

1
@Sinoosh Find는 실제로 와일드 카드를 "확장"하는 것이 아니라 발생하는 각 파일 이름을 일치시키는 테스트로 사용합니다. 일반적인 의미에서 와일드 카드를 확장하는 (매우) 몇 가지 명령이 있습니다. unzip을 사용하면 7z에서 여러 개의 아카이브를 열 수 있습니다 (예 : 인수가 일반적으로 " [archive filename single argument] [list of files to extract]" 형식 인 경우 ).
Random832
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.