для + array + args

У меня проблема с моим циклом, это то, что я хочу:

for arg do array[index]=(`find $arg -type l -maxdepth $depth -printf "%p\n" `) index++ done fi 

arg – позиционные аргументы, только каталоги

Этот цикл проходит через аргументы и находит символические ссылки, и я хочу, чтобы они хранились в массиве. Если я запускаю скрипт только с одним каталогом, он работает нормально, но когда я вхожу в два или более каталога, это не работает. Любая помощь ?

Я хочу работать так, например:

Есть два аргумента, каждый из которых является каталогом.

Цикл сначала устанавливает arg в первый каталог, а затем массив заполняется символическими ссылками, например, он найдет 2 символьных ссылки, поэтому массив [0] array [1] будет такими ссылками, а затем он должен продолжаться со вторым аргументом, и, например, есть 3 символические ссылки, и он должен установить их в массив [2] array [3] array [4]

One Solution collect form web for “для + array + args”

Если мы говорим ksh93 или bash (и GNU find ), нет многомерных массивов (или массивов массивов), вы могли бы сделать:

 index=0 IFS=$'\n' set -f for arg do eval "array_$index"'=($(find "$arg" -type l -maxdepth "$depth" -print))' ((index++)) done 

Чтобы иметь разные массивы, называемые array_0 , array_1

(вышеупомянутое предполагает, что имена файлов не содержат символов новой строки).

Если вы хотите, чтобы все ссылки были объединены в один массив, тогда:

 IFS=$'\n' set -f array=($(find "$@" -type l -maxdepth "$depth" -print)) 

должно быть достаточно.

Использование массивов или циклов в оболочках часто является признаком того, что вы не попадаете в проблему правильно.

Например, если вы хотите найти самую глубокую символическую ссылку (как предлагает ваш комментарий), вы бы сделали что-то вроде:

 find "$@" -type l -print | awk -F/ ' NF > n {deepest = $0; n=NF} END {print "Deepest:", deepest}' 

awk будет намного более эффективным, чем оболочка для обработки текста и работы с массивами. Он предназначен для этого. Оболочек нет (и bash всех оболочек является одним из самых неэффективных на нем). Оболочки хороши при выполнении команд (например, awk или find ), для чего они предназначены.

  • Как создать эту функцию для выбора случайной переменной из массива?
  • Проблема с длиной массива в сценарии bash
  • Странное поведение неинициализированных массивов и неустановленных массивов
  • Сортировка массива путей файлов по их базам
  • объединение 3 отдельных массивов в один многомерный массив в bash
  • Сохранить результат grep для массива
  • Назначение команды массиву в сценарии оболочки не работает?
  • массив awk, использующий число, поскольку значение не работает
  • В цикле над массивом добавьте элемент в массив
  • Чтение stdin в массив bash
  • Как получить доступ к элементу массива в оболочке?
  • Linux и Unix - лучшая ОС в мире.