bash 脚本没有读取或解析包含感叹号的字符串!和星号 *

bash 脚本没有读取或解析包含感叹号的字符串!和星号 *

我编写了一个 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=*)))'

相关内容