【问题标题】:Escaping double quotes in bash not working as expected在 bash 中转义双引号未按预期工作
【发布时间】:2018-08-19 14:03:53
【问题描述】:

这个例子效果很好:

if [[ "$(mysql -sse 'USE my_bd; SELECT COUNT(*) FROM my_table" -gt "0" ]]; 
  then echo 1;
  else echo 0;
fi

但我需要在 mysql -e 'query...' 内添加需要引号 ' 的 WHERE 子句

所以我需要像这样更改引号顺序并用双引号将mysql -e "query..." 括起来

我试图用\"逃跑

if [[ "$(mysql -sse \"USE my_bd; SELECT COUNT(*) FROM my_table WHERE my_column = 'something'\"" -gt "0" ]]; 
  then echo 1;
  else echo 0;
fi

但这引发了 bash 错误

-bash:命令替换:第 21 行:意外标记 `(' 附近的语法错误

我看到了关于 How to escape double quotes in bash? 的其他问题,但答案对我来说不起作用

【问题讨论】:

  • 我没有看到 $(mysql 关闭
  • 如果我将"$(mysql 更改为$(mysql 运行良好,您就有理由。 Bfff 我尝试了很多组合,但不是那个。谢谢下面的答案也有效。我需要更多的咖啡:)
  • 由于两边的值都是数字,没有" "也可以,但是如果期望值是字符串就不行了

标签: bash


【解决方案1】:

您可以直接使用以下命令:

if [[ "$(mysql -sse "USE my_bd; SELECT COUNT(*) FROM my_table WHERE my_column = 'something')" -gt "0" ]]; 
  then echo 1;
  else echo 0;
fi

我刚刚在测试环境中测试了上述命令,它运行良好。请参阅下面的类似示例:

 if [[ "$(mysql -sse "use testdb ; SELECT COUNT(*) from student where stu_id = '1001'")" -gt 0 ]];
   then echo "1" ; 
   else echo "0"; 
 fi
 1

【讨论】:

  • 你也有理由。我很可笑;)
  • 请参阅man bash 中的命令替换部分。 “当使用 $(command) 形式时,括号之间的所有字符构成命令;没有一个被特殊处理。”
  • 谢谢。很高兴知道这一点。 (我没有学过信息学……但我尽量学习)
猜你喜欢
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多