Voici le code en pur bash. Il affiche la partie de login passé en argument, suivi du nom ou des noms correspondants, avec leur login respectif entre parenthèses.
Par exemple, en passant « jo ro » en arguments, la sortie est :
jd: John Doe (jdoe), John Deo (jdeo)
ro: root (root)
- !/bin/bash
if ((! $#)); then
echo "error: no login or login's part(s) given." >&2
exit 1
fi
declare -A names
while IFS=: read -r login _ _ _ name _; do
for arg; do
if [[ $login = *"$arg"* ]]; then
names["$arg"]+="$name ($login), "
fi
done
done < <(getent passwd)
for k in "${!names[@]}"; do
printf '%s: %s\n' "$k" "${names[$k]%,*}"
done