#bash
#bash
Вопрос:
Я создал скрипт Bash, который обновляет некоторые записи DNS для меня (я новичок в Bash, поэтому, пожалуйста, наберитесь терпения).
Моя новая запись выглядит так:
NEW_TXT_CONTENT="v=spf1 a mx ip4:${NEW_IP} ~all"
Но правильные TXT-записи DNS должны заключаться в кавычки. Поэтому я изменил свою новую запись на:
NEW_TXT_CONTENT=""v=spf1 a mx ip4:${NEW_IP} ~all""
Часть MySQL выглядит следующим образом:
mysql -u root -pPassword dnszones -e "UPDATE records SET content="${NEW_TXT_CONTENT}" WHERE id="${TXT_ID}""
Я получаю следующий код ошибки:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'v=spf1 a mx ip4:10.10.10.10 ~all"" WHERE id="27591"' at line 1
Похоже, что база данных получает неправильные кавычки.
Есть ли другой способ избежать кавычек?
Обновить
Я узнал, если я напишу свою переменную следующим образом
NEW_TXT_CONTENT="'v=spf1 a mx ip4:${NEW_IP} ~all'"
это работает с записью в базу данных. Но я не хочу использовать одинарные кавычки.
Если я сделаю наоборот, переменная ${NEW_IP}
не будет интерпретироваться. Есть ли простое решение?
Комментарии:
1. Сколько кавычек вы хотите? Запустите следующее в терминале и внимательно посмотрите на результат:
x=""x"" ; echo ""$x""
2. Похоже, вы добавляете двойные кавычки дважды в
NEW_TXT_CONTENT=""v=spf1 a mx ip4:${NEW_IP} ~all""
иcontent="${NEW_TXT_CONTENT}"
. Удалите один…3. Хорошо. На самом деле не работает. Если я удалю (где угодно) пару двойных кавычек, она вообще не записывает ее в базу данных с кавычками :
v=spf1 a mx ip4:185.134.164.51 ~all
. Он должен записать это так:"v=spf1 a mx ip4:185.134.164.51 ~all"
4. @MattBackslash Подождите, вы хотите записать кавычки в базу данных? Тогда вы не сможете использовать тот же тип qoutes для цитирования строки. Как MySQL узнает, какие из них какие? Это не столько вопрос Bash, сколько вопрос о том, как заключать строку в кавычки в синтаксисе MySQL.