또 다른 문제find
s 빌드 명령의 한계에 대해 문의하십시오 -exec ... {} +
. 여기서 이러한 제한이 셸의 내부 제한과 어떻게 비교되는지 궁금합니다. 시스템 제약 조건을 모방합니까, 아니면 독립적입니까? 이것들은 무엇입니까?
저는 Bash 사용자이지만 단지 호기심 때문에 Unix 및 Linux 쉘을 배울 것입니다.
답변1
시스템 전체 매개변수 수 제한이 쉘 함수에 적용됩니까?
execve()
아니요. 이는 현재 실행 파일을 대체하기 위해 다른 실행 파일을 실행하기 위해 프로세스에서 사용하는 시스템 호출에 대한 제한 사항입니다. 이는 동일한 프로세스에서 현재 쉘 인터프리터에 의해 해석되는 함수에는 적용되지 않습니다. 내장 유틸리티에서도 작동하지 않습니다.
execve()
새 실행 파일을 로드하고 시작하기 전에 프로세스의 메모리를 지우십시오. 함수와 내장의 요점은 이런 일이 발생하지 않는다는 것입니다. 따라서 함수는 셸의 변수와 기타 인수를 수정할 수 있으므로 일반적으로아니요사용 execve()
.
시스템 제한을 모방합니까?
아니요.
아니면 독립적인가요?
예.
이것들은 무엇입니까?
현재 셸 프로세스의 리소스 제한에 따라 허용됩니다.
이것배쉬 매뉴얼설명하다:
배열 크기에는 최대 제한이 없으며, 멤버를 연속적으로 인덱싱하거나 할당해야 한다는 요구 사항도 없습니다.
이는 함수 매개변수가 내부 쉘 배열( exec
커널 함수에 전달되지 않음)이기 때문에 적용되는 것 같습니다.
역사적으로 배열 인덱싱에는 하한이 있었지만 함수 인수 수에는 제한이 없었습니다 ksh88
. pdksh
Bourne 셸에서만 $1
, ... 에 직접 액세스할 수 있지만 $9
함수에 여러 인수를 전달할 수 있습니다. 예를 들어 루프를 사용하여 모든 인수를 반복 for arg do...
하거나 다른 함수 또는 내장 함수에 전달할 수 있습니다. "$@"
.