【发布时间】:2013-12-05 04:48:34
【问题描述】:
我试图演示使用关联数组来收集计数。它在 while 循环中工作,但似乎在 while 循环之后丢失了所有信息。我究竟做错了什么?已添加除 for 循环中的所有 echo 语句以进行调试。
#!/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 或更高版本,您可以使用
shopt -s last pipe允许管道的最后一个命令在当前 shell(不是子 shell)中执行,这样可以消除您的问题。
标签: arrays bash associative