Могу ли я использовать встроенные выражения в моем aql для условия фильтра

Я редактировал другую запись и сделал ошибку. Augh. В любом случае, возможно, это может помочь? https://stackoverflow.com/a/11944320/1594168

Обратите внимание, что поскольку формат массива оболочки недокументирован в bash или любой другой стороне оболочки, очень трудно вернуться массив оболочек независимо от платформы. Вам нужно будет проверить версию, а также создать простой скрипт, который объединяет все массивы оболочек в файл, который могут разрешить другие процессы.

Однако, если вы знаете имя массива, который хотите принять назад домой, тогда есть способ, хотя немного грязный.

Допустим, у меня есть

MyAry[42]="whatever-stuff";
MyAry[55]="foo";
MyAry[99]="bar";

Итак, я хочу забрать его домой

name_of_child=MyAry
take_me_home="`declare -p ${name_of_child}`";
export take_me_home="${take_me_home/#declare -a ${name_of_child}=/}"

Мы можем видеть, что он экспортируется путем проверки из подпроцесса

echo ""|awk '{print "from awk =["ENVIRON["take_me_home"]"]";  }'

Результат:

from awk =['([42]="whatever-stuff" [55]="foo" [99]="bar")']

Если мы абсолютно обязаны, используйте env var для его выгрузки.

env > some_tmp_file

Затем

Перед запуском другого скрипта,

# This is the magic that does it all
source some_tmp_file

0
задан s1c0j1 18 January 2019 в 10:41
поделиться

1 ответ

Полагаю, вы ожидаете, что этот запрос не вернет совпадающих документов, но он все равно возвращает документ, даже если значение «permissions» не соответствует ожидаемому.

Это объясняется выражением запроса FILTER:

u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']

Это выражение использует оператор звезды, который всегда создает массив в качестве результата. Поскольку никакие элементы массива не соответствуют фильтру, используемому для отдельных элементов, результатом всего выражения является просто пустой массив:

[]

Таким образом, условие FILTER запроса преобразуется в

FILTER []

И [] равно true при преобразовании в boolean.filter (

Таким образом, при использовании этого условия FILTER каждый документ будет совпадать.

Изменение условия на

FILTER LENGTH(u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']) > 0
[ 1113] должен делать то, что вы хотите.

0
ответ дан stj 18 January 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: