Bash 另一个命令中的命令变量

Bash command variable inside another command

我正在尝试在脚本中执行 ldapsearch 命令。

以下无效

ADMIN_USER="$(whoami)";

ldapmodify -h myldapserver  -p 23223 -D 'uid=$ADMIN_USER,ou=people,ou=company,dc=corpcom,dc=com' -w "$ADMIN_PWD" -f /tmp/reset_password.ldif.$PID;

以上代码执行时出现以下错误 ldap_bind: Invalid credentials (49)

如果像下面这样对值进行硬编码,那么它就可以工作。

ADMIN_USER="$(whoami)";

ldapmodify -h myldapserver -p 23223 -D 'uid=adminuser,ou=people,ou=company,dc=corpcom,dc=com' -w "$ADMIN_PWD" -f /tmp/reset_password.ldif.$PID;

这有什么具体原因吗?我该如何解决这个问题?

Bash 没有扩展变量,因为您将它括在单引号中。更改字符串以使用双引号:

ADMIN_USER="$(whoami)";
ldapmodify -h myldapserver -p 23223 -D "uid=${ADMIN_USER},ou=people,ou=company,dc=corpcom,dc=com" -w "$ADMIN_PWD" -f /tmp/reset_password.ldif.$PID;

另见 this answer