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의 기본 시스템, 그러나 분명히 또한리눅스에서 사용 가능.

관련 정보