Если вы это сделаете:
ldapsearch -h ... "'(&(this)(that="${Field1}"))'"
Одинарные кавычки будут частью заключенной в кавычки строки и попадут в ldapsearch
. Который их не ожидает, выдавая ошибку. Кроме того, расширение ${Field1}
не заключено в кавычки, так как вторая двойная кавычка завершает заключение в кавычки. (Кавычки не вложены друг в друга.)
Другой ваш вывод похож на вывод xtrace Bash. Он пытается сказать вам, что аргумент на самом деле содержит буквальную цитату, но цитату довольно трудно прочитать.
В этом:
''\''(&(|(ObjectClass=Group1)(ObjectClass=Group2))(Field1Attribute=FIELD1OUTPUT))'\'''
у нас есть
'' -- an empty string
\' -- a literal backslash
'(&(|(...))' -- a quoted string
\' -- another literal backslash
'' -- another empty string
Я подозреваю, что вы хотите либо
ldapsearch -h ... "(&(this)(that=\"${Field1}\"))"
с двойными кавычками в строке, идущей к ldapsearch
, либо
ldapsearch -h ... "(&(this)(that=${Field1}))"
без них.
Во всяком случае, без окружающих одинарных кавычек. Я не совсем уверен, должны ли быть там двойные кавычки, я не могу вспомнить, какой формат принимают правила ldapsearch
.
Насколько я могу проверить на практике, это прекрасно работает на одной машине:
$ user=itvirta
$ ldapsearch -xLLL "(&(objectClass=shadowAccount)(uid=$user))"
$ ldapsearch -xLLL '(&(objectClass=shadowAccount)(uid=itvirta))'
Вы можете использовать замену процесса:
diff <(cat squid.conf.old | decomment) <(cat squid.conf.new | decomment)
Вы можете использовать замену процесса для этого:
diff <(decomment < squid.conf.old) <(decomment < squid.conf.new)