!
- это специальный символ (он выполняет подстановку истории команд) в интерактивном режиме, но не в скрипте. Это должно быть что-то, что вы будете вводить в интерактивном режиме, или что-то встроенное в сценарий? Если последнее, вы можете просто использовать двойные кавычки, и !
не будет проблемой.
Если вы используете это в интерактивном режиме, есть несколько вариантов. Одним из них является смешивание режимов цитирования в одном аргументе, как в "double-quoted-section"'single-quoted-section'"another-quoted-section"
. Это выглядит странно, но работает отлично. Как то так:
ldapsearch -h 1.0.24.24 -p 389 -x -t -LLL -S cn \
-D cn=user,ou=resources,o=otherresource,c=xx -w server101 \
-b ou=Non-Staff,ou=people,o=test,c=us \
"(&(objectClass=inetOrgPerson)(createTimestamp<=$month_8)("'!'"(nEApps=*))(nEDHHSNFAccNbr=\00)(nECreatedBy=cioSelfRegistered)(loginTime<=$month_3))" dn
^^^^^
Альтернативно, вы можете определить переменную как !
(используя одинарные кавычки), а затем использовать эту переменную внутри двойных кавычек:
exclamation='!'
ldapsearch -h 1.0.24.24 -p 389 -x -t -LLL -S cn \
-D cn=user,ou=resources,o=otherresource,c=xx -w server101 \
-b ou=Non-Staff,ou=people,o=test,c=us \
"(&(objectClass=inetOrgPerson)(createTimestamp<=$month_8)($exclamation(nEApps=*))(nEDHHSNFAccNbr=\00)(nECreatedBy=cioSelfRegistered)(loginTime<=$month_3))" dn
^^^^^^^^^^^^