HP-UX: Как узнать, был ли когда-либо установлен пароль?

Хотя ассоциативные массивы bash были вдохновлены ассоциативными массивами ksh93 (со всеми их недостатками), они не поддерживают присваивание своим значениям ничего, кроме скаляров.

Для ассоциативного массива, чьи значения могут быть массивами, вам нужно ksh93:

$ ksh -c 'typeset -A logs; for f in *.log*; do logs[${f%.log*}]+=($f); done; typeset -p logs'
typeset -A logs=([example1]=(example1.log example1.log.1) [log2]=(log2.log) [xpto]=(xpto.log xpto.log.1 xpto.log.2) )

Перебирать их:

typeset -A logs
for f in *.log*; do logs[${f%.log*}]+=($f); done

for key in "${!logs[@]}"; do
  printf '%s:\n' "$key"
  for file in "${logs[$key][@]}"; do
     printf ' File: "%s"\n' "$file"
  done
done

zsh Ассоциативные массивы также могут иметь только скалярные значения, но поскольку эти значения могут содержать символ NUL, они могут хранить списки произвольных имен файлов (разделив их символами NUL). В bash, поскольку все имена файлов находятся в текущем каталоге, вы можете разделить их символами /. Или если вы можете сделать некоторое предположение, что определенный символ не встречается в именах файлов (например, подход @xhienne с символом пробела), вы можете использовать его вместо этого. Также обратите внимание, что bash ассоциативные массивы имеют ограничение на то, что ключ не может быть пустым.

2
24.12.2015, 22:25
0 ответов

Теги

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