Вы можете сделать это в чистом bash
, используя его соответствие регулярному выражению:
#!/usr/bin/env bash
IFS="|"; command eval 'name="$*"'
getent passwd | while IFS= read line; do
IFS=: read -a fields <<<"$line"
if [[ ${fields[4]} =~ $name ]]; then
echo "${fields[5]}"
fi
done
Строка IFS="|"; command eval 'name="$*"'
устанавливает name
в аргументы командной строки, разделенные вертикальными чертами, поэтому они работают как альтернативы в регулярном выражении. (См. Bash FAQ 104 для получения подробной информации о синтаксисе этой строки и альтернативах.)
Пример:
$ bash demo.sh "[Ss]ystemd" "[Rr]oot"
/root
/run/systemd
/run/systemd/netif
/run/systemd/resolve
/run/systemd