代码之家  ›  专栏  ›  技术社区  ›  Aavik

重新计算表达式

  •  0
  • Aavik  · 技术社区  · 6 年前

    export query1="select count(*) from table1 where date='\${file_dt}'"
    
    file_date="20180616"
    file_dt=`date -d ${file_date} +'%Y-%m-%d'`
    echo $file_dt
    
    >>2018-06-16
    
    echo "$query1"
    >>select count(*) from table1 where date='${file_dt}'
    

    >>select count(*) from table1 where date='2018-06-16'
    

    有什么建议吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Charles Duffy    6 年前

    如中所述 BashFAQ #50 是代码

    get_query() { echo "select count(*) from table1 where date='${file_dt}'"; }
    
    file_date=20180616
    file_dt=$(date -d "$file_date" +%Y-%m-%d)
    
    get_query
    

    realized_query=$(get_query) file_dt 变为变量;是否应将 get_query


    get_query() { echo "select count(*) from table1 where date='$(date -d "$1" +%Y-%m-%d)'"; }
    get_query 20180616
    

    date -d 调用是函数的一部分,您可以不太关心SQL注入:任何可能的输入都不会导致包含文本的值 '


    eval BashFAQ #48 讨论原因 -最好避免使用基于技术;除了常见的安全问题之外,这将导致字符串中的任何文字双引号 改为句法的,关闭作为 否则会造成混乱。

    # DO NOT DO THIS. Error-prone.
    
    query1="select count(*) from table1 where date='\${file_dt}'"
    
    file_date="20180616"
    file_dt=`date -d ${file_date} +'%Y-%m-%d'`
    
    eval "echo \"$query1\""
    
        2
  •  0
  •   Jens    6 年前

    首先分配文件,不要转义文件扩展:

    $ file_date="20180616"
    $ file_dt=`date -d ${file_date} +'%Y-%m-%d'`
    $ export query1="select count(*) from table1 where date='${file_dt}'"
    $ echo "$query1"
    select count(*) from table1 where date='2018-06-17'