2014-03-07 68 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 

這一工程

一個