2014-04-30 10 views
2

스크립트에서 괄호와 쉼표가 표시되면 혼란 스럽습니다. 나는 그것이 그것을 어떻게 만드는지 정말로 이해할 수 없다. 예를 들어괄호와 쉼표는 찾기에서 무엇을합니까?

find /work \(-fprint /dev/stderr \) , \(-name 'core' -exec rm {} \; \)

질문 : - 브라켓 - 무슨 일을합니까? - 쉼표는 무엇입니까? -이 매뉴얼은 bash에서 괄호와 쉼표 키워드에 대한 정보를 얻을 수 있습니다.

+0

'man bash' ????? – John3136

+0

컴퓨터에서'man find '를 찾으십시오. 또는 [웹 맨 페이지] (http://www.linuxmanpages.com/man1/find.1.php)를 확인하십시오. –

+0

감사합니다. 나는 그것을 들여다 볼 것이다 – taymedee

답변

2

괄호/괄호는 해당 조건 자 중에서 우선 순위를 적용하기 위해 find에 사용됩니다. 쉼표는 GNU find의 연산자로 선행 술어와 뒤에 오는 술어를 모두 평가하지만 첫 번째 술어의 결과는 무시합니다.

  • -fprintf /dev/stderr
  • -name 'core' -exec rm {} \;

첫 번째는 표준 오류에 찾은 파일의 이름을 인쇄 : 명령

find /work \(-fprint /dev/stderr \) , \(-name 'core' -exec rm {} \; \) 

에서 두 (화합물) 술어가 있습니다. 두 번째 파일은 이름이 core 인 파일 만 제거합니다. 쉼표가 없으면 제거되는 파일의 이름 만 표준 출력에 기록됩니다. 즉, 쉼표는 복수 술어에 대해 수행 된 암시 적 and을 겹쳐 씁니다. (-fprintf 주변의 괄호는 단일 술어로 구성된 그룹을 구성하기 때문에 선택 사항 일 수 있지만 긍정적이지는 않습니다.)

+0

당신이 말했듯이, 첫 번째는 발견 된 파일의 이름을 표준 오류로 출력 한 다음 목록을 화면에 표시하기 위해 어떤 키워드를 인쇄합니까? – taymedee

+0

절대적으로 긍정적으로 화면에'/ dev/tty'를 써야합니다. 그러나 보통'/ dev/stderr' (에러)이나'/ dev/stdout' (실제 출력)에 쓰고 명령의 사용자가 그 파일 디스크립터가 터미널을 가리켜 야하는지 결정하게하거나 다른 파일이나 파이프 라인. 시작할 때 셸의 표준 출력과 오류는 터미널/화면에 바인딩되며 명시 적으로 변경하지 않는 한 셸에서 시작한 모든 프로그램은 동일한 파일 설명자를 상속합니다. – chepner

+0

그것은 당신의 훌륭한 설명을위한 감사, 감사합니다 :) – taymedee

2

()은 bash에서 하위 쉘에서 하나 이상의 명령을 실행하는 데 사용됩니다. 자세한 내용은 http://www.tldp.org/LDP/abs/html/subshells.html에서 확인할 수 있습니다.

그러나 게시 한 명령에서는 bash에 의해 사용되지 않습니다.이 명령은 이스케이프 처리되므로 ( 대신 \(을 사용하고 있습니다. 결과적으로 ()이 인수로 find으로 전달됩니다. 또한 bash에 특별한 의미가 있기 때문에 이스케이프 처리됩니다. 지금까지 find에 관한 한, 다음 인수를 본다 :

/work (-fprint /dev/stderr) , (-name 'core' -exec rm {} ;) 

쉼표 (,)는 find 명령의 일부입니다. bash은 아무 작업도 수행하지 않습니다.

+0

내가 'work'디렉토리에있는 내용을 찾아서/dev/stderr에 붙여 넣으면서 파일 내용에 'core'가 들어있는 파일이 제거된다는 것을 알 수 있습니까? – taymedee

+0

첫 번째 부분이 옳습니다. 두 번째 부분은'/ work' 또는 그 하위 디렉토리 아래에'core '라는 플래그가 붙은 이름의 모든 파일을 제거한다는 의미입니다. –

+0

@R Sahu 알겠습니다, thanks :) – taymedee

관련 문제