CentOS 7 изменяет время моего компьютера на +4 часа, когда я загружаю диск с Windows

Вместо этого я бы предложил использовать ассоциативные массивы:

#! /bin/bash -
typeset -A dir log # declare both variables as associative arrays
dir=(
   [family]=/home/family
  [friends]=/home/friends
     [pets]=/home/pets
)
log=(
   [family]=/var/log/family.log
  [friends]=/var/log/friends.log
     [pets]=/var/log/pets.log
)
for type in "${!dir[@]}"
do
  cat -- "${dir[$type]}/somefile" >> "${log[$type]}"
done

("${!array[@]}"является синтаксисом ksh для получения списка ключей массива (в произвольном порядке )).

Или более разборчиво в zsh (, который имел ассоциативные массивы за десятилетия до bash):

#! /bin/zsh -
typeset -A dir log
dir=(
  family  /home/family
  friends /home/friends
  pets    /home/pets
)
log=(
  family  /var/log/family.log
  friends /var/log/friends.log
  pets    /var/log/pets.log
)
for type in ${(k)dir}
do
  cat -- $dir[$type]/somefile >> $log[$type]
done

В ksh93 (, из которого bash позаимствовал синтаксис ассоциативного массива ), вы также могли использовать ассоциативные массивы составных переменных:

#! /bin/ksh93 -
conf=(
   [family]=(dir=/home/family;  log=/var/log/family.log)
  [friends]=(dir=/home/friends; log=/var/log/friends.log)
     [pets]=(dir=/home/pets;    log=/var/log/pets.log)
)
for type in "${!conf[@]}"
do
  cat -- "${conf[$type].dir}/somefile" >> "${conf[$type].log}"
done
0
03.08.2021, 00:50
0 ответов

Теги

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