В утилите jq должен содержать ([""]) возвращать истину, если проверяемый массив не содержит ""? - PullRequest
0 голосов
/ 15 января 2020

Я ожидаю, что последний тест будет ложным в следующем.

$ echo '["a","b","c"]' | jq 'contains(["a"])'
true
$ echo '["a","b","c"]' | jq 'contains(["d"])'
false
$ echo '["a","b","c"]' | jq 'contains([""])'
true
$ jq --version
jq-1.6
$

Я что-то упустил?

Ответы [ 3 ]

2 голосов
/ 15 января 2020

Из jq документов :

Строка B содержится в строке A, если B является подстрокой A. Массив B содержится в массиве A, если все элементы в B содержатся в любом элементе в A.

"" является подстрокой "a""b" и "c"), поэтому "a" содержит "" и поэтому ["a","b","c"] содержит [""].

1 голос
/ 15 января 2020

Да, это ожидается. Из документации для contains (выделено мной):

Массив B содержится в массиве A, если все элементы в B содержатся в любом элементе в A .

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

0 голосов
/ 15 января 2020

Следующее делает то, что я намереваюсь, чтобы определить, содержит ли массив пустую строку в качестве элемента.

$ echo '["a","","b"]' | jq 'any(.=="")'
true
$ echo '["a","b"]' | jq 'any(.=="")'
false
$

Спасибо тем, кто ответил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...