bash ldap 搜索 - 变量作为过滤器

bash ldap search - variable as filter

我正在争论一些我认为很简单的事情....

我想从 ldap 查找用户经理,然后获取经理的电子邮件和 sam 名称。

我希望能够像这样从 ldap 获取经理的 cn:

manager=$(/usr/bin/ldapsearch -LLL -H ldap://company.ads -x -D admin@company.ads -w password -b ou=employees,dc=company,dc=ads sAMAccountName=employee1 | grep "manager:" | awk '{gsub("manager: ", "");print}' | awk 'BEGIN {FS=","}; {print ,  }' )

给我这样的 cn:

CN=manager,\ Surname

现在,当我 运行 另一个这样的查询时:

/usr/bin/ldapsearch -LLL -H ldap://company.ads -x -D admin@company.ads -w password -b ou=employees,dc=company,dc=ads $manager 

我得到错误的搜索过滤器 (-7) 回显命令复制,粘贴 运行 它我取回记录....

我已经尝试了多种变体,有人能看出我缺少什么吗?

谢谢。

由于$manager中有一个space,所以需要用引号引起来,以免被分割成多个参数。

/usr/bin/ldapsearch -LLL -H ldap://company.ads -x -D admin@company.ads -w password -b ou=employees,dc=company,dc=ads "$manager"

一般来说,最好始终引用变量,除非您特别希望将其拆分为单词。

您还需要从 LDAP 条目中删除反斜杠 \。反斜杠用于在脚本中转义文字 space,它们不应在数据中使用,因为在扩展变量时不会处理它们。