#arrays #bash #psql
Вопрос:
Я пытаюсь вызвать массив bash в запрос psql, который находится внутри цикла for, но я не могу заставить его работать…
Это то, что у меня есть до сих пор
#!/bin/bash IFS=
Вывод - это просто пустые строки.
Комментарии:
1. Выполните все это в SQL, а не переводите первый результат запроса в массив Bash. Это может быть сделано в виде одного SQL-запроса с внутренним соединением самой таблицы групп.
Ответ №1:
Так лучше?
#!/bin/bash IFS=
Комментарии:
1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?
2. Вот так?
select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id
но то, что он делает, больше похоже на:select id from groups where parent in ( select id from groups where parent = 127)
3. Выглядит примерно так
n' groupids=(`psql -X -A -d files -t -c 'select id from groups where parent=127'`) arr=${#groupids[@]} for (( x = 0; xlt;arr; x )); do users=$(psql -X -A -d files -t -c "select id from groups where parent=${groupids[${x}]}") echo $users done Вывод - это просто пустые строки.
Комментарии:
1. Выполните все это в SQL, а не переводите первый результат запроса в массив Bash. Это может быть сделано в виде одного SQL-запроса с внутренним соединением самой таблицы групп.
Ответ №1:
Так лучше?
Комментарии:
1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?
2. Вот так?
select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id
но то, что он делает, больше похоже на:select id from groups where parent in ( select id from groups where parent = 127)
3. Выглядит примерно так
n' read -r -d '' -a groupids lt; lt;(psql -X -A -d files -t -c 'select id from groups where parent=127') for gid in "${groupids[@]}" do # check that we're dealing with digits [[ $gid =~ ^[[:digit:]] $ ]] || { echo "invalid format: $gid" gt;amp;2; continue; } users=$(psql -X -A -d files -t -c "select id from groups where parent=$gid") echo "$users" done
Комментарии:
1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?
2. Вот так?
select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id
но то, что он делает, больше похоже на:select id from groups where parent in ( select id from groups where parent = 127)
3. Выглядит примерно так
n’ groupids=(`psql -X -A -d files -t -c ‘select id from groups where parent=127’`) arr=${#groupids[@]} for (( x = 0; xlt;arr; x )); do users=$(psql -X -A -d files -t -c «select id from groups where parent=${groupids[${x}]}») echo $users done
Вывод — это просто пустые строки.
Комментарии:
1. Выполните все это в SQL, а не переводите первый результат запроса в массив Bash. Это может быть сделано в виде одного SQL-запроса с внутренним соединением самой таблицы групп.
Ответ №1:
Так лучше?
Комментарии:
1. Зачем переносить идентификаторы групп в массив bash, а не выполнять внутреннее соединение sql из таблицы групп на самом себе?
2. Вот так?
select id from groups g1 inner join groups g2 on g2.id = 127 and g1.parent = g2.id
но то, что он делает, больше похоже на:select id from groups where parent in ( select id from groups where parent = 127)
3. Выглядит примерно так