我编写了一个 ldap 搜索 bash 脚本,其搜索范围/过滤器包含感叹号“!”和星号“*”。像这样的东西和脚本没有正确读取双引号之间的字符串。当我传入命令行时,相同的过滤器工作得很好:
"(&(objectclass=*)(uid=*)("\!"(roles=*)))"
以下是在 bash 脚本中运行的完整 ldapsearch 查询:
ldapsearch -h localhost -p 389 -D "cn=ldapadm,o=proxy" -W - -b "ou=users,o=org" -s sub -LLL "(&(objectclass=*)(uid=*)("\!"(roles=*)))" | grep dn:
答案1
使用单引号,因为双引号中的内容是由 shell 插入的,并且星号或感叹号对其具有特定含义。
-LLL '(&(objectclass=*)(uid=*)("\!"(roles=*)))'
我不知道你的内部双引号是否是必要的,你可能还需要删除它们,所以实际上语法应该是:
-LLL '(&(objectclass=*)(uid=*)(!(roles=*)))'