2014-02-16 90 views
0

我試圖使用sed提取文本文件的最後一行並將其移動到變量。但是,使用引號進行命令替換可以打破已經使用引號的sed命令。命令在bash shell中替換,當命令本身有引用時

sed '$!d' cookie.txt 

返回:localhost FALSE /XSS/ FALSE ****** loggedIn No

然而,試圖將其移動到一個變量,像這樣:

varin='sed '$!d' cookie.txt' 

不提供輸出變量$瓦蘭

對於PHP,我們可以使用雙引號和單引號嵌套引號,這裏有類似的東西嗎?

+0

有幫助的懶惰建議:您是否嘗試通過在其前面放置\來逃避內部反引號?看看這是否是一個正確的方向:'varin ='sed \'$!d \'cookie.txt'' – Jarmund

+0

變量是shell變量? – Kent

+0

不要在'bash'中使用反引號。 '$(...)'遠遠優越。 –

回答

3

試試這個:

var=$(tail -1 cookie.txt) 

或SED:

var=$(sed '$!d' cookie.txt) 
+0

$(...)似乎不起作用,但是,var ='tail -1 cookie.txt',做我想要的。感謝您的建議。出於某種奇怪的原因,$(..)給出了一個localhost:command not found錯誤。 –

+2

'$(...)似乎並不奏效---你可能有些東西不是bash,或者是極其過時的bash版本。 –

2

如果您收到類似「本地主機:未找到命令」錯誤與$(...),這聽起來像你嵌套了反引號命令替換,如

variable=$(`sed '$!d' cookie.txt`) 

反引號將運行sed命令生成以「localhost」開頭的字符串,然後因爲該字符串在$(...),之內,所以它將視爲要運行的命令。只需使用

variable=$(sed '$!d' cookie.txt) 

應該做你想做的。