Сколько элементов может хранить массив в 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: индекс вне диапазона

когда я даю только один массив для массива perm, как показано ниже, я не получаю ошибки.

 set -A perm ${PR_Tperm[@]} 

У меня так много записей для хранения в массиве perm . Как увеличить размер массива динамически? set -A не связан с bash, но это динамическое увеличение может быть одинаковым для 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?

  • Сценарий Bash - автоматический ввод пользовательского ввода (пароль хранилища ключей)
  • Новые строки в именах файлов
  • есть ли какая-либо команда типа «стена», которая выполняет «команду» во всех терминалах
  • Избегайте расширения обратной косой черты с эхом в тире
  • В то время как цикл занимает больше времени для завершения
  • Можно ли использовать команды типа `fg` в shell-скрипте?
  • echo $ 1 = некотируемая разнесенная строка?
  • Условное выполнение - запуск постоянных подпроцессов и коротинов
  • One Solution collect form web for “Сколько элементов может хранить массив в unix-скрипте?”

    У Bash есть, если я правильно помню, нет встроенного ограничения на размер массива. KornShell93 поддерживает индексы до 64k в последних выпусках (и до 4095 в более старых версиях).

    Существует утилита mtree которая используется для сравнения иерархии файлов со спецификацией. Любое отклонение от спецификации (отсутствующие файлы или каталоги, несоответствия владения / разрешения) сообщается и может быть скорректировано (если возможно).

    Поскольку я не знаю, что вы делаете Unix, я не могу указать вам, где найти эту утилиту. Он находится в базовой системе OpenBSD , но, очевидно, также доступен для Linux .

    Linux и Unix - лучшая ОС в мире.