Bash-скрипт / Mysql-запрос

Bash-скрипт / Mysql-запрос

Я хочу создать bash-скрипт с запросом:

mysql -D $Database -u $User -p$Password \
      -e "UPDATE example SET example='["TEXT","TEXT","TEXT"]' WHERE example='example';"`

Мой результат в таблице:

[TEXT,TEXT,TEXT]

Мне нужно:

["TEXT","TEXT","TEXT"]

Как это исправить?

решение1

Когда вы начинаете кавычки с двойных кавычек ( "), кавычки заканчиваются на первом, неэкранированном, "is find. Другими словами, после удаления кавычек аргумент после -eмедленно становится таким:

"UPDATE example SET example='["TEXT","TEXT","TEXT"]' WHERE example='example';"
UPDATE example SET example='[TEXT","TEXT","TEXT"]' WHERE example='example';"  # dropped first quotes
UPDATE example SET example='[TEXT,TEXT","TEXT"]' WHERE example='example';"  # drop 2nd quotes (",")
UPDATE example SET example='[TEXT,TEXT,TEXT"]' WHERE example='example';"  # drop 3rd (",")
UPDATE example SET example='[TEXT,TEXT,TEXT]' WHERE example='example';  # drop last

Но поскольку внутри кавычек нет пробелов, оболочка объединяет их в один аргумент.

Поэтому вам нужно экранировать "внутри строки, разделенной двойными кавычками ( "). т.е.

mysql -D $Database -u $User -p$Password \
      -e "UPDATE example SET example='[\"TEXT\",\"TEXT\",\"TEXT\"]' WHERE example='example';"

Extra examples:

$ echo yay
yay

$ echo "yay"
yay

$ echo "yay yay"
yay yay

$ echo "yay 'yay' yay"
yay 'yay' yay

$ echo "yay 'yay yay yay' yay"
yay 'yay yay yay' yay

$ echo "yay 'yay "yay" yay' yay"
yay 'yay yay yay' yay

$ echo "yay 'yay \"yay\" yay' yay"
yay 'yay "yay" yay' yay

Ура! Работает. Когда вы экранируете (добавляете \перед символом) двойные кавычки, они становятся частью аргумента.

А теперь пример того, как это может пойти не так:

$ perl -e 'print "$ARGV[0]\n"' "yay "yay" yay"
yay yay yay

$ perl -e 'print "$ARGV[0]\n"' "yay "yay "yay"
yay yay

В последнем примере аргументы были разделены, потому что есть пробел, который не был взят в кавычки. То, что было взято в кавычки, это "yay "(в начале) и "yay"(в конце).

Связанный контент