使用 bash 将变量中的多行字符串添加到 mysql

Add multi line string from variable into mysql with bash

我是 运行 一个 python 脚本,其中 returns 几行文本,我使用以下截断命令 tr 并想将其添加到我的数据库中.

我从这里开始:这会删除未格式化的行分隔符。

tr -d '' < long_text > unixfile.txt

然后我得到如下所示的输出:


Happy Birthday Whosebug

Happy Birthday to you

Happy Birthday Whosebug

我使用以下命令将其放入变量中:

lyrics=$(cat unixfile.txt)
mysql --user=USER --password=PASSWORD --database='DB' --execute='INSERT INTO `song_lyrics` (`id`, `song_id`, `lyrics`, `info`) VALUES ('"'$i'"', '"'$i'"', '"$lyrics"', '0');'
ERROR 1064 (42000) at line 1:

似乎 MySQL 在三个不同的命令中看到了我的整个 3 行字符串(如上所示),因为 unixfile.txt 的输出出现在错误输出中。

可以使用以下方法解决此问题:

确保在文件中捕获长文本字符串,而不是变量 - 然后 re-capture file/variable。

lyrics=$(cat unixfile.txt)

mysql --user="$user" --password="$password" --database="$my_db" <<END
use my_db;
INSERT INTO song_lyrics (id, song_id, lyrics, info) VALUES ("$i", "$i", "$lyrics", '0');
END

此方法可确保正确传递变量。

唯一剩下的问题是各种标点符号 虽然这个 post 没有描述这个。