bash - 如何执行存储为带引号和星号的字符串的 bash 命令

标签 bash scripting escaping quotes

<分区>

我尝试执行以下命令:

mysql AMORE -u username -ppassword -h localhost -e "SELECT  host  FROM amoreconfig"

我将它存储在一个字符串中:

cmd="mysql AMORE -u username -ppassword -h localhost -e\"SELECT  host  FROM amoreconfig\""

测试它:

echo $cmd
mysql AMORE -u username -ppassword -h localhost -e"SELECT host FROM amoreconfig"

尝试执行:

$cmd

然后我得到了 mysql 的帮助页面:

mysql  Ver 14.14 Distrib 5.1.31, for pc-linux-gnu (i686) using readline 5.1
Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
(...)

我想我对引号做了一些明显的错误,但无法找出问题所在。

最佳答案

你试过吗:

eval $cmd

对于如何转义 * 的后续问题,因为它在裸露或双引号字符串中具有特殊含义:使用单引号。

MYSQL='mysql AMORE -u username -ppassword -h localhost -e'
QUERY="SELECT "'*'" FROM amoreconfig" ;# <-- "double"'single'"double"
eval $MYSQL "'$QUERY'"

奖励:它也读起来不错:eval mysql query ;-)

关于bash - 如何执行存储为带引号和星号的字符串的 bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2005192/

相关文章:

linux - 两台远程服务器上的 git diff(在 git git --no-index 之外)

linux - 比较字符串和变量时出现奇怪的 Bash 错误

Linux sed 命令 - 使用带反斜杠的变量

python - 如何为正则表达式转义 unicode 字符串?

bash - 从 IPython 执行 Bash 命令

linux - 测试命令时参数的语法

linux - 用于创建指向共享库的符号链接(symbolic link)的 Bash 脚本

php - 如何使用php pdo安全地将数据插入mysql

c++ - MySQL/C++ 连接器 mysql_real_escape_string 函数

linux - Shell:如何从多个参数创建列表变量