一个用户拥有多个包含空格的组成员身份。例子:
- mydomain\员工
- mydomain\员工管理员
- mydomain\staff 超级
可以使用以下方式返回用户组:
id -Gn username | grep -i -o '\bstaff\b'
不幸的是,如果用户是“mydomain\staff admin”或“mydomain\staff super”的成员,而不是“mydomain\staff”的成员,则此操作会返回命中。如何仅搜索“mydomain\staff”组成员身份?
根据要求,示例输出来自
id -Gn username
如下(均为一行):
mydomain\staff mydomain\staff admin mydomain\staff super mydomain\其他一些组
答案1
由于id -Gn
输出是空格分隔的,因此您不能使用它。
id
自 coreutils 8.22 起,GNU 实现可以-z
选择输出以 nul 分隔的列表,而不是以空格分隔的列表,因此您可以这样做(使用grep
您似乎已经在使用的 GNU):
id -Gzn username | grep -Fxz 'mydomain\staff'
或者:
id -Gzn username | grep -z '\\staff$'
对于staff
任何在领域(无论那是什么)。
否则,如果你有getent
命令,你可以逆向解决问题:
staff_members=$(getent group 'mydomain\staff' | cut -d : -f 4-)
case ",$staff_members," in
(*,username,*) printf '%s\n' 'username is member of mydomain\staff'
esac