【问题标题】:echo variable result in quotes BASH在引号中回显变量结果 BASH
【发布时间】:2016-11-15 13:48:11
【问题描述】:

我有一个这样的 bash 脚本:

#!/bin/bash
pavadinimas=$1
pavadinimas2=${pavadinimas::-4}
echo "#!/bin/sh
mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="$pavadinimas"';
vlc -f --play-and-exit /var/www/html/uploads/$pavadinimas" > /var/www/html/script/"$pavadinimas2.sh"

我对这一行有疑问:

mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="$pavadinimas"';

如您所见,我想将变量添加到引号中,但是没有它就出来了。我尝试了很多组合来解决这个问题,但我失败了。经验不足:/

脚本结果:

#!/bin/sh

    mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = parodymai + 1 WHERE Failo_vardas=name.mp4';
    vlc -f --play-and-exit /var/www/html/uploads/gaidys.mp4

我想用这样的引号来回显变量:

mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="name.mp4"';

【问题讨论】:

  • 转义要使用的引号,例如WHERE Failo_vardas=\"$pavadinimas\".
  • @Gavin 该死的,我忘记了“\”字符......非常感谢!您可以将此添加为答案,以便我接受吗?
  • 您的脚本易受 SQL 注入攻击。
  • @Chepner 有什么建议如何保护它吗?我对这些东西很陌生,只是为自己制作一个项目,用于学习目的。提前致谢!
  • 不要将bash 用于此类项目。使用具有允许参数化查询的适当 SQL 库的语言,而不是使用字符串操作动态构造 SQL 命令。

标签: bash


【解决方案1】:

你真的很亲密。您只需要转义要使用的引号。 例如WHERE Failo_vardas=\"$pavadinimas\"

【讨论】:

    【解决方案2】:

    您必须保留单引号,否则您的变量将不会被评估。

    所以在双引号之后插入一个单引号,将你的变量放在评估中,然后在你的变量之后重新插入一个引号。在单引号结束的地方,你的 env.变量将被评估而不是被逐字处理。

    演示:

    $ pavadinimas=name.mp4
    
    $ echo 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="'$pavadinimas'"';
    

    结果:

    UPDATE boom SET count = count + 1 WHERE Failo_vardas="name.mp4"
    

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 1970-01-01
      • 2012-06-24
      • 2015-10-08
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多