2017-08-08 26 views
1

我想将我的scala编译器的当前版本存储在变量中。为了找到Scala编译器版本,我可以运行命令scalac -version得到以下的输出:无法在bash中分割文本字符串

$> scalac -version 
Scala compiler version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL 

我知道下面的命令会让我第四字的空格分隔字符串:

> N=4; echo "Scala compiler version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL" | grep "Scala compiler" | awk -v N=$N '{print $N}' 
2.11.6 

但是,如果不使用硬编码字符串,我使用scalac -version作为echo命令的输入,结果字符串不会被分割:

> N=4; echo "$(scalac -version)" | grep "Scala compiler" | awk -v N=$N '{print $N}' 
Scala compiler version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL 

如何从第三个代码段获取第二个代码段的结果?

由于

+0

更改' “$ {scalac -version)”''到 “$ {scalac -version}”' ;您正在使用闭括号而不是闭合大括号。 –

+0

最后一个命令行包含语法错误。发布你需要帮助的真正命令。 –

+0

是的,它确实包含语法错误。我在我的电脑上使用了无错命令,我只是在输入问题时犯了错误。我的道歉,这个问题依然存在。 –

回答

1

cut

scalac -version 2>&1|cut -d' ' -f4 

像@大卫C.兰说,scalac -version输出上stderr,所以2>&1重定向stderrstdout

+1

当你在你的答案中指定'stderr'问题时,我将你添加为正确的答案。谢谢!! –

+0

不客气。感谢您接受我的回答。 – tso

1

随着GNU的grep:

scalac -version | grep -Po '(?<=version).*?(?=)' 

或AWK:

scalac -version | awk '{print $4}' 

输出:

 
2.11.6 
+0

对不起,我已经在我的bash终端上运行了这两个命令,并且仍然将完整的字符串作为输出。你确定这些是正确的命令吗? –

+0

@DanielHernandez在'stdout'或'stderr'上输出'scalac -version'?试试'scalac -version 2>&1 | grep -Po'(?<= version)。*?(?=)'' –

+0

你是对的! 'scalac -version'输出到'stderr',我不知道为什么会出现这种情况。谢谢! –