代码之家  ›  专栏  ›  技术社区  ›  Javier Salas

Bash-herdoc格式在末尾添加新行);

  •  0
  • Javier Salas  · 技术社区  · 5 年前

    我正在尝试创建一个bash脚本来创建自动sql语句,以便在DB中运行它们,而无需手动修改脚本。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);
    

    谢谢

    0 回复  |  直到 5 年前
        1
  •  0
  •   tansy    5 年前

    刚刚测试了脚本,它没有添加任何意外的新行

    #!/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} 变量包含新行。 这就是答案。

    推荐文章