2014-12-23 75 views
0

我不知道爲什麼這個命令:錯誤命令的輸出assingning給一個變量在bash(Linux)的

FILE=`file /usr/bin/java | tr -d \`\' | awk '{print $5}'` 

結果此錯誤消息:

bash: command substitution: line 1: unexpected EOF while looking for matching ``' 
bash: command substitution: line 2: syntax error: unexpected end of file 

如果我運行先前的命令沒有它賦值給一個變量,它按預期工作:

$ file /usr/bin/java | tr -d \`\' | awk '{print $5}' 
/etc/alternatives/java 

有誰知道爲什麼會這樣,我怎麼能全成y將輸出值分配給一個變量?我試圖從符號鏈接中找到指向二進制文件的指向路徑,所以我可以找出它是32位還是64位文件(以通用的方式,不使用類似java -version

注2:我試着sed代替tr去掉引號,但它返回相同的錯誤

非常感謝你提前,問候...

Nacho

回答

5

我想這是因爲你在back-ticks裏面包含了這些命令。使用$()而不是反引號。

FILE=$(file /usr/bin/java | tr -d \`\' | awk '{print $5}') 
+1

不是back-ticks是原始代碼的問題,但它們內部沒有轉義。包含在反標記中的命令行包含兩個反斜槓,它們需要轉義,但它們不是。 – axiac

+0

非常感謝Avinash Raj!這解決了我的問題 – NachoGomez

+0

@axiac你是對的,逃避它就像這樣工作很好'FILE = \'file/usr/bin/java | tr -d \\''\'| awk'{print $ 5}'\'' – NachoGomez

相關問題