Я пытался продемонстрировать использование ассоциативной аранжировки для сбора счетов. Он работает в цикле while, но, похоже, потерял всю свою информацию после цикла while. Что я делаю не так? Для отладки были добавлены все операторы эха, кроме одного в цикле for.Проблема с ассоциативным массивом в скрипте Баша
#!/bin/bash
declare -A shell_type
shells=$(cut -d: -f7 /etc/passwd)
echo "$shells"|
while read sh
do
if [ -z "${shell_type[$sh]}" ]
then
shell_type[$sh]=1
else
let "shell_type[$sh] += 1"
fi
echo "$sh ${shell_type[$sh]}"
echo "${!shell_type[*]}"
echo "${shell_type[*]}"
done
echo "${shell_type[*]}"
for var in "${!shell_type[*]}"
do
echo "$var count is ${shell_type[$var]}"
done
Если вы используете 4.2 или более позднюю версию, вы можете использовать 'lastt' для последней транзакции, чтобы последняя команда конвейера выполнялась в текущей оболочке (а не на подоболочке), что устраняет вашу проблему. – chepner