Bash Heredoc 格式在末尾添加一个新行);
Bash Heredoc format adding a new line at the end of );
我正在尝试创建一个 bash 脚本来在数据库中创建自动 sql 语句 运行 它们,而无需手动修改 .sql 脚本并避免人为错误,当它使用 heredoc 格式生成输出文件时会出现问题,在 bash 脚本的末尾添加一个新行,其中 sql 语句以 结尾) ;
我知道这很容易,比如对这些字符进行转义,但我试图用反斜杠对它们进行转义,但没有用,这是我的例子:
cat <<EOF >> $updateTabletmp
INSERT INTO ${table}_${currentTimeStamp}
SELECT * FROM ${table} WHERE field_1= ${count} AND field_2 = (SELECT field_2
FROM bartable WHERE field_2 = ${store});
EOF
这是当前输出:
INSERT INTO foo_123419294
SELECT * FROM PHYPIOEE WHERE field_1 = 2177 AND field_2= (SELECT field_2
FROM bartable WHERE field_2 = 8788
);
正如你所看到的某些原因 );作为一个新行移动,预期的输出将是这样的:
INSERT INTO foo_123419294
SELECT * FROM PHYPIOEE WHERE field_1 = 2177 AND field_2= (SELECT field_2
FROM bartable WHERE field_2 = 8788);
谢谢
刚刚测试了您的脚本,它没有添加任何意外的新内容line/s
#!/bin/sh
out=out.txt
table=table
currentTimeStamp=12345678
count=123
store=asdf
cat <<EOF >> $out
INSERT INTO ${table}_${currentTimeStamp}
SELECT * FROM ${table} WHERE field_1= ${count} AND field_2 = (SELECT field_2
FROM bartable WHERE field_2 = ${store});
EOF
结果是:
INSERT INTO table_12345678
SELECT * FROM table WHERE field_1= 123 AND field_2 = (SELECT field_2
FROM bartable WHERE field_2 = asdf);
所以只有一个原因:您的 ${store}
变量包含新行。
这就是答案。
我正在尝试创建一个 bash 脚本来在数据库中创建自动 sql 语句 运行 它们,而无需手动修改 .sql 脚本并避免人为错误,当它使用 heredoc 格式生成输出文件时会出现问题,在 bash 脚本的末尾添加一个新行,其中 sql 语句以 结尾) ; 我知道这很容易,比如对这些字符进行转义,但我试图用反斜杠对它们进行转义,但没有用,这是我的例子:
cat <<EOF >> $updateTabletmp
INSERT INTO ${table}_${currentTimeStamp}
SELECT * FROM ${table} WHERE field_1= ${count} AND field_2 = (SELECT field_2
FROM bartable WHERE field_2 = ${store});
EOF
这是当前输出:
INSERT INTO foo_123419294
SELECT * FROM PHYPIOEE WHERE field_1 = 2177 AND field_2= (SELECT field_2
FROM bartable WHERE field_2 = 8788
);
正如你所看到的某些原因 );作为一个新行移动,预期的输出将是这样的:
INSERT INTO foo_123419294
SELECT * FROM PHYPIOEE WHERE field_1 = 2177 AND field_2= (SELECT field_2
FROM bartable WHERE field_2 = 8788);
谢谢
刚刚测试了您的脚本,它没有添加任何意外的新内容line/s
#!/bin/sh
out=out.txt
table=table
currentTimeStamp=12345678
count=123
store=asdf
cat <<EOF >> $out
INSERT INTO ${table}_${currentTimeStamp}
SELECT * FROM ${table} WHERE field_1= ${count} AND field_2 = (SELECT field_2
FROM bartable WHERE field_2 = ${store});
EOF
结果是:
INSERT INTO table_12345678
SELECT * FROM table WHERE field_1= 123 AND field_2 = (SELECT field_2
FROM bartable WHERE field_2 = asdf);
所以只有一个原因:您的 ${store}
变量包含新行。
这就是答案。