man find

man find

{}나는 최근에 여는 중괄호와 닫는 중괄호 사이에 아무 것도 없이 중괄호 쌍을 명령이나 옵션에 대한 인수로 사용하는 예를 발견했습니다 .

cat foo | xargs -I{} echo {}

find . -size 0 -exec rm -i {} \;

문서 없음

내 문제는 문서를 찾을 수 없다는 것입니다GNU 배쉬 매뉴얼{}위 예제의 맥락에서 사용법을 설명합니다.

내 생각엔 이건 아닌 것 같아매개변수 확장, 매개변수 확장에서는 에 표시된 대로 달러 기호가 중괄호 앞에 있어야 하기 때문입니다 ${}.

그건 하나가 될 수 없어버팀대 확장둘 중 하나 는 및가 {x..y[..incr]}선택 사항이 아닌 형식을 취하기 때문입니다 .xy

또한 그것은명령 그룹화또는 for가 {}매개변수로 사용됩니다.

질문

  1. {}일반적으로 중괄호 쌍은 이를 허용하는 명령에 대한 인수로서 무엇을 의미합니까?

  2. as 매개변수의 사용법을 설명하는 문서는 어디에서 찾을 수 있나요 {}?

답변1

이 중괄호는 bash에 의해 예약되어 있으며 find각각 xargs및 매뉴얼 페이지에 설명되어 있습니다.

man find

-exec 주문하다 ;

구현하다주문하다;반환 상태가 0이면 참입니다. find에 대한 다음 인수는 ;다음으로 구성된 인수가 발견될 때까지 명령에 대한 인수로 처리됩니다 . 문자열은 {}일부 버전에서와 같이 별도의 인수뿐만 아니라 명령 인수에 나타나는 모든 곳에서 처리되는 현재 파일 이름으로 대체 됩니다 find. \이 옵션을 사용하는 방법에 대한 예는 예 섹션을 참조하십시오 -exec. 지정됨 주문하다일치하는 각 파일에 대해 한 번씩 실행합니다. 이 명령은 시작 디렉터리에서 실행됩니다. 이 작업을 사용하면 피할 수 없는 보안 문제가 있으므로 -exec 이 옵션을 사용해야 합니다 -execdir.

-exec 주문하다 {} +

이 작업의 변형은 -exec지정된 작업을 실행합니다.주문하다그러나 명령줄은 선택된 각 파일 이름을 끝에 추가하여 작성됩니다. 명령의 총 호출 수는 일치하는 파일 수보다 훨씬 적습니다. 명령줄은 xargs해당 명령줄과 거의 동일한 방식으로 구축됩니다. {}이 인스턴스는 명령에 하나만 허용됩니다. 이 명령은 시작 디렉터리에서 실행됩니다. 오류가 발생 하면 find즉시 종료되는 경우가 있으므로 보류 중인 일부 명령이 전혀 실행되지 않을 수도 있습니다. 이 변형은 -exec항상 true를 반환합니다.

-execdir 주문하다 ;

-execdir 주문하다 {} +

와 유사 -exec하지만 지정된 명령은 일반적으로 검색을 시작한 디렉터리가 아닌 일치하는 파일이 포함된 하위 디렉터리에서 실행됩니다. 이는 일치하는 파일에 대한 경로를 구문 분석하는 동안 경쟁 조건을 방지하므로 명령을 호출하는 더 안전한 방법입니다. -exec 작업 과 마찬가지로 + 양식은 -execdir 일치하는 여러 파일을 처리하기 위해 명령줄을 작성하지만 지정된 명령 호출은 동일한 하위 디렉터리에 존재하는 파일만 나열합니다. 이 옵션을 사용하는 경우 $PATH환경 변수가 참조되지 않도록 해야 합니다 .. 그렇지 않으면 공격자가 실행할 디렉터리에 적절한 이름의 파일을 남겨두어 원하는 명령을 실행할 수 있습니다 -execdir. 항목이 $PATH비어 있거나 절대 디렉터리 이름이 아닌 경우에도 마찬가지입니다 . 오류가 발생 하면 find즉시 종료되는 경우가 있으므로 보류 중인 일부 명령이 전혀 실행되지 않을 수도 있습니다. 작업의 결과는 해당 작업이 사용되는지 +아니면 변형이 사용되는지 에 따라 달라집니다.;-execdir 주문하다 {} +항상 true를 반환하지만-execdir 주문하다 {} ;다음의 경우에만 true를 반환합니다.주문하다0을 반환합니다.

man xargs

-I 교체-str

발생 교체교체-str초기 인수에서는 표준 입력에서 이름을 읽습니다. 또한 따옴표가 없는 공백은 항목을 종료하지 않으며 대신 구분 기호는 개행 문자입니다. 의미 -x하고 -L 1.

-i[교체-str], --replace[=교체-str]

이 옵션의 동의어는 다음과 같습니다.-I교체-str만약에교체-str지정됨. 만약에교체-str누락된 매개변수는 와 동일한 효과를 갖습니다 -I{}. 이 옵션은 더 이상 사용되지 않습니다 -I. 대신 사용하세요.

편집 : 그리고 여기bash는 중괄호를 무시합니다.

man bash

{ 목록; }

목록 현재 쉘 환경에서 실행하면 됩니다. 목록개행 또는 세미콜론으로 종료되어야 합니다. 이를 그룹 명령이라고 합니다. 반환 상태는 목록의 종료 상태입니다. 메타 문자와는 달리(그리고),{그리고}은 예약어이므로 예약어 인식이 허용되는 곳에 나타나야 합니다. 단어 분리를 유발하지 않으므로 공백이나 기타 쉘 메타 문자로 목록과 구분해야 합니다.

강조하기 위해:목록은 줄 바꿈 또는 세미콜론으로 끝나야 합니다..

관련 정보