2014-03-07 45 views
0

我在想如何在变量bash for循环中传递*。我想在一个数据库运行多个SELECT查询,我想我会使用一个bash for循环,像这样:在变量bash中传递'*'循环

for query in "select * from filtertype limit 10;" "select * from filter limit 10;"; do echo $query; echo $query | mysql -uroot -ppassword database; done 

麻烦的是*不断扩大越来越像这样:

[Bash]$ for query in "select * from filtertype limit 10;" "select * from filter limit 10;"; do echo $query; echo $query | mysql -uroot -ppassword database; done 
select acceptance_test bin build-dist.xml build-path-definitions.xml build.properties build.xml classes config core-def database dependencies dev.properties dist docs dummyFile_pdffile.pdf eclipse_classes findbugsExcludeFilter.xml generated getRevision.sh local.build.properties log nohup.out plugins-defs plugins-framework pmc-api-client pmd_rules.xml port_helper.sh raw_data-pigunit-input-overridden.txt raw_event_data-pigunit-input-overridden.txt raw-pigunit-input-overridden.txt rpmbuild src testArea unit_test web from filtertype limit 10; 
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'build-dist.xml build-path-definitions.xml build.properties build.xml classes con' at line 1 
select acceptance_test bin build-dist.xml build-path-definitions.xml build.properties build.xml classes config core-def database dependencies dev.properties dist docs dummyFile_pdffile.pdf eclipse_classes findbugsExcludeFilter.xml generated getRevision.sh local.build.properties log nohup.out plugins-defs plugins-framework pmc-api-client pmd_rules.xml port_helper.sh raw_data-pigunit-input-overridden.txt raw_event_data-pigunit-input-overridden.txt raw-pigunit-input-overridden.txt rpmbuild src testArea unit_test web from filter limit 10; 
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'build-dist.xml build-path-definitions.xml build.properties build.xml classes con' at line 1 
[Bash]$ 

当我试图围绕循环变量单引号,我得到了同样的错误,当我单,双引号,我得到了明星:

select \* from filtertype limit 10; 
ERROR at line 1: Unknown command '\*'. 
select \* from filter limit 10; 
ERROR at line 1: Unknown command '\*'. 

所以,问题是 - 是否有可能通过一个字符串变量以“* '在它成为一个bash循环?

一个

回答

1

的问题是,您的变量引用$query,是不带引号,因而受到shell扩展(在这种情况下,*扩展到文件和目录的名称在当前目录,一个称为路径名扩展的过程)。

因此,简单地双引号您的变量的引用,以保护他们免受扩展:

echo "$query" 
+0

我打字,我发现它的正确无误。我会将你的问题标记为正确答案 – amadain

+0

@amadain:谢谢,我很感激。 – mklement0

0

我找到了答案。希望这对其他人至少有用。解决的办法是引用变量,当它获取调用:

for query in "select * from filtertype limit 10;" "select * from filter limit 10;"; do echo "$query"; echo "$query" |mysql -uroot -ppassword database; done 

这一工程

一个