2015-11-17 191 views
0

EDITED如何將括號和單引號添加到bash字符串

我想從bash腳本中對我的mysql數據庫進行一些插入操作。在這個數據的基礎上也有一些VARCHAR類型的參數,所以我必須說出來了,當我使查詢

我執行查詢,這樣

mysql --user=**** --password=**** -e $ext dbname

我想介紹$ EXT的下一個文本:insert into tname (string,int) values ('$var',$ivar)

問題是,當我試圖插入圓括號和「'」他們只放在字符串的開始。

我放錯了這個例子後,我會發布部分代碼: 我從文件中獲取數據並將所有行存儲在myarray中;

while IFS=$'\n' read -r line_data; do 
myarray[i]="${line_data]" 
((++i)) 
done < file.txt 

,然後在其他同時

somevar=${myarray[i++]} 
var="'$somevar'" 
echo $somevar 
echo $var 

結果:

Hello 
'Hello 
+1

'$ somevar =「x」'不是bash語法。這不是perl,謝謝。當你使用正確的分配語法時,它應該起作用。 – 4ae1e1

+0

而且正確的語法是'var ='value''。注意,沒有'$',在引用變量時使用。 – dan08

+0

4ae1e1事實上,我沒有這麼做,我現在要改正它,thx –

回答

0

正如@chepner說這是becouse在獲取字符串它在所有字符串的結束一個\ r字符,這樣奇怪的事情發生

刪除所有字符串的字符拉斯

var=${myarray[i++]} 
var=${var::-1} 
1

你的任務語法不正確。 $僅在引用變量時使用,而不是在爲其分配值時使用。修復你的作業,它應該很好地工作:

mysql --user=**** --password=**** -e "$ext" dbname 

有根據是什麼字符數的方式,這可能出問題,:

$ var=foo 
$ ivar=23 
$ ext="insert into tname (string,int) values ('$var',$ivar)" 
$ echo $ext 
insert into tname (string,int) values ('foo',23) 

現在你可以像這樣使用它在你的命令在你試圖插入的數據中,寫入文件而不是變量可能更容易。

+0

這是我嘗試的時候,當我開始這個,但不工作,那樣,仍然不知道爲什麼 –

+1

@ainhoasayans'ext'的值是正確的,但你需要引用實際通話中的擴展。'mysql --user = **** --password = **** -e「$ ext」dbname「,這樣整個字符串就像'-e'選項的單個參數一樣直接傳遞。 – chepner

+0

@chepner真的,我會這樣做,但問題是,在我的情況下,$ ext的值是不正確的 –

相關問題