Unix 스크립트에 배열이 저장할 수 있는 요소 수는 몇 개입니까?

Unix 스크립트에 배열이 저장할 수 있는 요소 수는 몇 개입니까?

디렉토리의 파일 권한과 해당 하위 디렉토리의 내용을 확인 /usr해야 합니다 /tmp. 각 및 에 /var대해 별도로 배열의 디렉터리 및 해당 하위 디렉터리 파일에 대한 파일 권한을 얻었습니다 /usr./tmp/var

fun() {
  set -A  PR_Uperm -- "/usr" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
  set -A  PR_Tperm -- "/tmp" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
  fun2
}

마지막으로 스크립트에 동적 범위가 있으므로 이러한 개별 배열이 서로 다른 함수의 단일 배열에 있기를 원합니다. 나는 다음을 시도했습니다 :

fun2(){
  set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}

스크립트를 실행하면 이 오류가 발생합니다.

script.sh:79919: 아래 첨자가 범위를 벗어났습니다.

배열만 줄 때파마배열은 다음과 같으며 오류가 발생하지 않습니다.

set -A perm ${PR_Tperm[@]}

저장할 항목이 많습니다.파마대량으로. 배열의 크기를 동적으로 늘리는 방법은 무엇입니까?그룹 ABash와는 관련이 없지만 이러한 동적 증가는 아마도 bash와 ksh에서도 동일하므로 포함하겠습니다.

다음과 같이 임시 파일에 저장해 보았습니다.

printf "/usr\n`ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`\n" >> /tmp/output2.txt  # not working in ksh, but working when I run as bash
ksh: no space

ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}' >> /tmp/output2.txt # it is working

첫 번째 명령이 bash에서는 성공적으로 실행되지만 ksh에서는 실행되지 않는 이유는 무엇입니까?

답변1

내가 정확하게 기억한다면 Bash에는 배열 크기에 대한 기본 제한이 없습니다. KornShell93은 최신 버전에서 최대 약 64k(이전 버전에서는 최대 4095)의 인덱스를 지원합니다.

mtree파일 계층 구조를 사양과 비교하는 유틸리티가 있습니다 . 사양과의 차이(파일이나 디렉터리 누락, 소유권/권한 차이)를 보고하고 선택적으로 수정합니다(가능한 경우).

나는 귀하가 어떤 Unix를 사용하고 있는지 모르기 때문에 이 유틸리티를 찾을 수 있는 위치에 대한 추가 지침을 제공할 수 없습니다. 내부에OpenBSD 기본 시스템, 그러나 분명히 또한리눅스에서 사용 가능.

관련 정보