시스템 전체 매개변수 수 제한이 쉘 함수에 적용됩니까?

시스템 전체 매개변수 수 제한이 쉘 함수에 적용됩니까?

또 다른 문제finds 빌드 명령의 한계에 대해 문의하십시오 -exec ... {} +. 여기서 이러한 제한이 셸의 내부 제한과 어떻게 비교되는지 궁금합니다. 시스템 제약 조건을 모방합니까, 아니면 독립적입니까? 이것들은 무엇입니까?

저는 Bash 사용자이지만 단지 호기심 때문에 Unix 및 Linux 쉘을 배울 것입니다.

답변1

시스템 전체 매개변수 수 제한이 쉘 함수에 적용됩니까?

execve()아니요. 이는 현재 실행 파일을 대체하기 위해 다른 실행 파일을 실행하기 위해 프로세스에서 사용하는 시스템 호출에 대한 제한 사항입니다. 이는 동일한 프로세스에서 현재 쉘 인터프리터에 의해 해석되는 함수에는 적용되지 않습니다. 내장 유틸리티에서도 작동하지 않습니다.

execve()새 실행 파일을 로드하고 시작하기 전에 프로세스의 메모리를 지우십시오. 함수와 내장의 요점은 이런 일이 발생하지 않는다는 것입니다. 따라서 함수는 셸의 변수와 기타 인수를 수정할 수 있으므로 일반적으로아니요사용 execve().

시스템 제한을 모방합니까?

아니요.

아니면 독립적인가요?

예.

이것들은 무엇입니까?

현재 셸 프로세스의 리소스 제한에 따라 허용됩니다.

이것배쉬 매뉴얼설명하다:

배열 크기에는 최대 제한이 없으며, 멤버를 연속적으로 인덱싱하거나 할당해야 한다는 요구 사항도 없습니다.

이는 함수 매개변수가 내부 쉘 배열( exec커널 함수에 전달되지 않음)이기 때문에 적용되는 것 같습니다.

역사적으로 배열 인덱싱에는 하한이 있었지만 함수 인수 수에는 제한이 없었습니다 ksh88. pdkshBourne 셸에서만 $1, ... 에 직접 액세스할 수 있지만 $9함수에 여러 인수를 전달할 수 있습니다. 예를 들어 루프를 사용하여 모든 인수를 반복 for arg do...하거나 다른 함수 또는 내장 함수에 전달할 수 있습니다. "$@".

관련 정보