假设我有以下文件列表:
/aaa/bbb/file1.txt
/aaa/ccc/file2.txt
/aaa/bbb/file3.txt
/aaa/bbb/file4.txt
/aaa/ccc/file5.txt
我希望在阵列中拥有一组所有唯一的dirnames。结果数组看起来像这样:
dirs=( "/aaa/bbb" "/aaa/ccc" )
我想我可以做这样的事情,但感觉真的很冗长(原谅语法错误,我没有贝壳方便):
dirs=()
for f in filelist do
dir=$(dirname $f)
i=0
while [$i -lt ${#dirs[@]} ]; do
if [ dirs[$i] == $dir ]
break
fi
i=$[i + 1]
done
if [ $i -eq ${dirs[@]} ]
dirs+=($dir)
fi
done
答案 0 :(得分:2)
使用关联数组:
declare -A dirs
for f in "${filelist[@]}"; do
dir=$(exec dirname "$f") ## Or dir=${f%/*}
dirs[$dir]=$dir
done
printf '%s\n' "${dirs[@]}"
或者如果输入来自文件:
readarray -t files < filelist
for f in "${files[@]}"; do
dir=$(exec dirname "$f") ## Or dir=${f%/*}
dirs[$dir]=$dir
done
exec