Позвольте мне сначала ответить на ваш второй вопрос:
expressionNames
используются для интерполяции. Это означает, что после интерполяции этот объект выражения фильтра:
"expression": "#partitionKey = :value",
"expressionNames": {
"#partitionKey": "id"
}
будет преобразован в:
"expression": "id = :value",
#partitionKey
действует как заполнитель для имени вашего столбца id
, '#'
оказывается разделителем.
expressionNames
необходимы, потому что некоторые ключевые слова зарезервированы DynamoDB , что означает, что вы не можете использовать эти слова внутри выражения DynamoDB.
Когда вам нужно сравнить что-либо в выражении DynamoDB, вам также потребуется использовать замену фактического значения с использованием заполнителя, поскольку типизированное значение DynamoDB является сложным объектом. [тысяча сто двадцать семь]
В следующем примере:
"expression": "myKey = :partitionKey",
"expressionValues": {
":partitionKey": {
"S": "123"
}
}
:partitionKey
является заполнителем для комплексного значения
{
"S": "123"
}
':'
- это другой разделитель, который сообщает DynamoDB использовать [ 1111] карта при замене.
expressionNames
и expressionValues
всегда используются при генерации кода? Просто для логики генерации кода всегда проще использовать expressionNames
и expressionValues
, потому что нет необходимости иметь два кодовых пути для зарезервированных / незарезервированных слов DynamoDB. Использование expressionNames
всегда предотвращает столкновения!
Используйте встроенную команду compgen:
compgen -A variable | grep X
Это должно сделать это:
env | grep ".*X.*"
Редактирование: извините, это ищет X в значении также. Эта версия только ищет X на имя var
env | awk -F "=" '{print $1}' | grep ".*X.*"
, Как Paul указывает в комментариях, если Вы ищете локальные переменные также, ENV должен быть заменен набором:
set | awk -F "=" '{print $1}' | grep ".*X.*"
Самый легкий мог бы быть должен сделать
printenv |grep D.*=
, единственная разница - это, также распечатывает значения переменной.