2012-12-21 40 views
5

下面的腳本將一堆csv文件加載到mysql數據庫中。我試圖在循環內執行此函數,但名爲return的mysql表字段導致腳本認爲它應該執行函數返回。如何在bash腳本中跳過「返回」功能

`````````````````返回mysql是一個mysql關鍵字。

for f in *.txt; 
do 
mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (`return`,`id`,`field1`,`field2`);"; 
done 

回答

4

這是mysql中使用反引號字符的愚蠢引用約定。你可以用單引號代替,即',即'return'

反引號意思是「在shell中的當前命令中執行命令替換」,所以它試圖運行命令return

如果您不能使用'return'那麼你可以逃避所有的反引號,像

\`return\` 

IHTH

+2

單引號將列名轉換爲字符串 - 不是所需的行爲。 –

+0

我躲過反引號,它按預期工作,謝謝! – zer0bit

3

發生這種情況是因爲由``包圍的字符串是由bash執行的。

試試這個:

echo '` date `' # this output the string ` date ` 
echo "` date `" # this output current time 

但你不能改變雙引號單一個,因爲你需要$f與變量sostituded。所以請注意\

+0

您需要用雙引號獲取分隔標識符,不是嗎?它們當然不僅僅是單引號暗示的字符串值。 –

2

只需逃脫你反引號:

mysql -uroot -ppassword -e "LOAD DATA INFILE '$f' INTO TABLE info FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (\`return\`,\`id\`,\`field1\`,\`field2\`);";