2014-12-23 74 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

相关问题