Можно ли установить столбцы и значения в запросе mysql равным набору массивов, которые могут изменять размер и контент? Я думал об использовании цикла, но я понял, что могу понять, как фраза
mysql -u$user -p$password -h$host $database<<EOFMYSQL
INSERT INTO customers (${ArrayA[0]}, ${ArrayA[1]}, ${ArrayA[2]}, ${ArrayA[3]})
VALUES ('${Array2[0]}' , '${ArrayB[1]}' , '${ArrayB[2]}' , '${ArrayB[3]}')
EOFMYSQL
Идея цикла
mysql -u$user -p$password -h$host $database<<EOFMYSQL
for (( c=0; c<=${#ArrayA[@]}; c++ ))
do
echo $c
INSERT INTO Customers (${ArrayA[$c]})
VALUES ('${ArrayB[$c]}')
done
EOFMYSQL
Какие-либо предложения?
Вы можете попробовать что-то подобное для работы с массивами в bash...
fields=(field1 field2 field3)
vals=("val1" "val2" "val3")
nvals=()
# need to add the single quotes around the values
for v in "${vals[@]}"; do nvals+=("'$v'"); done
# keep the old value of IFS so we can reset it. Of course, if this is
# being done in a script this may not be necessary.
oldifs=$IFS
# set bash word separator to a comma so that is included in the expansions
IFS=','
into="${fields[*]}"
values="${nvals[*]}"
echo "$into"
echo "$values"
IFS=$oldifs
# this is just to show the expansion with the original IFS
into="${fields[*]}"
echo "back to regular IFS:"
echo "$into"
результаты, достижения:
field1,field2,field3 'val1','val2','val3' back to regular IFS: field1 field2 field3
Расширение массива с помощью [*] принимает только первый символ переменной IFS (стандартная переменная bash, используемая для разделения слов), поэтому я не смог добавить никаких пробелов, чтобы сделать ее более читаемой. Конечно, в настоящее время игнорируются поля, содержащие нестандартные символы и значения со встроенными одинарными кавычками.
Я также обнаружил, что мне нужно было установить расширение на переменную (в и значения), чтобы правильно получить расширение, я не мог просто откликнуть на массивы, например
echo "${into[*]}"