Создайте массивы с расширением фигурной скобки в цикле

Я лично использую webacula, веб-GUI для Бакулюмов, который позволяет выполнять много определенных задач, включая доступ к консоли Bacula в случае необходимости. Относительно документации Вы посмотрели на веб-сайт Бакулюмов? Существует хорошая документация и хорошая Wiki также.

4
29.12.2014, 03:13
3 ответа

Расширение отсрочки скобки на самом деле является в случае EVAL , в частности, если вы хотите, чтобы обоснованные вещи - Обычное расширение параметров не делает правильной вещи в нужное время.

Это должно делать то, что, похоже, вы хотите:

LIST={JF,JFE,RFS,JBF,JFI,JMCB}
for year in {1998..2000} {2009..2011}
do
  eval "y$year=($LIST-$year)"
  tmp="y$year[@]"
  echo "${!tmp}"
done

Вы не можете косвенно в массиве, поэтому необходимо настроить массив внутри EVAL тоже, если вы хотите распечатать его. Если вы этого не сделаете, вы можете взять все после ; . TMP используется для косвенного расширения : с TMP , установленным на «Y $ год [@]» , где заменяется его значением, расширение $ {! TMP} дает содержимое массива этой итерации (что $ {Y1998 [@]} , ETC, расширилось бы к).

Приведенная выше выводится:

JF-1998 JFE-1998 RFS-1998 JBF-1998 JFI-1998 JMCB-1998
JF-1999 JFE-1999 RFS-1999 JBF-1999 JFI-1999 JMCB-1999
JF-2000 JFE-2000 RFS-2000 JBF-2000 JFI-2000 JMCB-2000
JF-2009 JFE-2009 RFS-2009 JBF-2009 JFI-2009 JMCB-2009
JF-2010 JFE-2010 RFS-2010 JBF-2010 JFI-2010 JMCB-2010
JF-2011 JFE-2011 RFS-2011 JBF-2011 JFI-2011 JMCB-2011

, а также создавать массивы Y1998 ... Y2011 . объявляет , не требуется строго необходимым, хотя они позволяют пропустить EVAL , если вы нацеливаетесь на это и не нужно затрагивать.

Я предлагаю, чтобы это, вероятно, не так, как вы действительно хотите достичь своей базовой цели, хотя, что бы то ни было. Вложенные петель не являются злым, и если каким-либо кусочком он жесткозедировал, вы можете абстрактным.

6
27.01.2020, 20:47

. / SYS файловая система (SYSFS) содержит файлы, которые предоставляют информацию о Устройства: включенные ли он, имя и модель и модель поставщика, на какую шину устройство подключено устройство и т. Д. Оно представляет интерес к приложениям, которые управляют устройствами.

Файловая система / dev содержит файлы, которые позволяют программам для доступа к самим устройствам: запись данных в последовательный порт, прочитайте жесткий диск и т. Д. Оно представляет интерес к приложениям, которые получают доступ к устройствам.

Метафора состоит в том, что / sys обеспечивает доступ к упаковке, а / dev обеспечивает доступ к содержанию коробки.

Файлы в / SYS не являются узлами устройств, а символические ссылки и обычные файлы. Эти регулярные файлы имеют особые в этом чтении или записи им, вызывают функции, специфичные файлами в ядре, такие как узлы устройства. Разница в том, что файлы в / SYS работают таким образом из-за файловой системы, на которой они включены, тогда как узлы устройства работают так из-за характеристик узлов устройств (тип файла, указывающий на устройство (блок или символ) устройство, и устройство основное и незначительное число, указывающее, какое устройство это).

Причина / DEV , существующих независимо от / SYS , частично историческими: / dev даты обратно на рассвете Unix, а / SYS является гораздо более свежем изобретением. Если Linux был разработан сегодня без исторического фона, / dev / sda может быть / sys / block / sda / content .

-121--23357-

Вот один из способов (с расширением скоба) :

unset y _y
for y in {JF,JFE,RFS,JBF,JFI,JMCB,}-{{1998..2000},{2009..2011}}
do  case "${_y=y${y#*-}[@]}"               in 
    (y${y#-}*) echo "${!_y}"               ;; 
    (*)        declare -a "${_y%???}+=($y)";; 
esac; unset y _y; done

, который расширит ваш параметр, установленный для PLOOP для для всех желаемых Значения Plus Дополнительный последний набор, который будет состоять только в годы. Для каждого, что делает , начнутся с цифры , объявляет Добавляет элемент массива на любой y $ {y ## * [! 0-9]} И для каждого, что , echo печатает его.

Так что для первых 36 итераций он создает каждый массив, а за последние 6 он печатает каждый. Выход:

JF-1998 JFE-1998 RFS-1998 JBF-1998 JFI-1998 JMCB-1998
JF-1999 JFE-1999 RFS-1999 JBF-1999 JFI-1999 JMCB-1999
JF-2000 JFE-2000 RFS-2000 JBF-2000 JFI-2000 JMCB-2000
JF-2009 JFE-2009 RFS-2009 JBF-2009 JFI-2009 JMCB-2009
JF-2010 JFE-2010 RFS-2010 JBF-2010 JFI-2010 JMCB-2010
JF-2011 JFE-2011 RFS-2011 JBF-2011 JFI-2011 JMCB-2011

вот альтернатива, возможно ...

for year in 1998 1999 2000 2009 2010 2011
do  printf "%s-$year " JF JFE RFS JBF JFI JMCB
echo; done

, что, по крайней мере, принесет вам тот же выход ... Чтобы также хранить, что в массиве, вероятно, вы можете ...

for year in 1998 1999 2000 2009 2010 2011
do  declare -a "y$year=($(printf "%s-$year " JF JFE RFS JBF JFI JMCB |
               tee /dev/fd/2 ))"
    year=y$year[@]; year=(${!year})
    echo "${#year[@]}"
done 2>&1; unset year

Это вывод от второй команды, но первые отпечатывает одинаковые SANS THE 6 - то, что только указывает счетчик элемента массива.

JF-1998 JFE-1998 RFS-1998 JBF-1998 JFI-1998 JMCB-1998 6
JF-1999 JFE-1999 RFS-1999 JBF-1999 JFI-1999 JMCB-1999 6
JF-2000 JFE-2000 RFS-2000 JBF-2000 JFI-2000 JMCB-2000 6
JF-2009 JFE-2009 RFS-2009 JBF-2009 JFI-2009 JMCB-2009 6
JF-2010 JFE-2010 RFS-2010 JBF-2010 JFI-2010 JMCB-2010 6
JF-2011 JFE-2011 RFS-2011 JBF-2011 JFI-2011 JMCB-2011 6

Помните, что объявляет - это команда и var $ Explate = (что-то $ расширяется) Аргумент - это просто - ARG. Объявление args расширяется так же, как и любой другой - что не относится к VAR $ Expand = $ Explay . Таким образом, вы можете косвенно объявить так же, как вы можете косвенно экспортировать или что-то еще - трудности, которые вы используете, не нужны.

4
27.01.2020, 20:47

Преобразование фигурных скобок в массив с помощью set - .

Затем у вас есть простой двумерный цикл для построения вашего вывода:

set -- {JF,JFE,RFS,JBF,JFI,JMCB}
for year in {1998..2000} {2009..2011}; do
    printf "y%s: " $year
    for code do
        printf "%s-%s " $code $year
    done
    echo
done

Результаты:

y1998: JF-1998 JFE-1998 RFS-1998 JBF-1998 JFI-1998 JMCB-1998
y1999: JF-1999 JFE-1999 RFS-1999 JBF-1999 JFI-1999 JMCB-1999
y2000: JF-2000 JFE-2000 RFS-2000 JBF-2000 JFI-2000 JMCB-2000
y2009: JF-2009 JFE-2009 RFS-2009 JBF-2009 JFI-2009 JMCB-2009
y2010: JF-2010 JFE-2010 RFS-2010 JBF-2010 JFI-2010 JMCB-2010
y2011: JF-2011 JFE-2011 RFS-2011 JBF-2011 JFI-2011 JMCB-2011
2
27.01.2020, 20:47

Теги

Похожие вопросы