2013-12-15 44 views
0

我已经搜索了几个答案,但这些不能应用于我的问题。bash脚本 - 字符串比较产生意想不到的结果

问题代码如下。

我觉得dart -version的结果不是简单的字符串。

DART_VER=$(dart --version) 
#expect output as ==>> Dart VM version: ... 
echo "${DART_VER}" 

if [[ "$DART_VER" == Dart* ]] 
then 
echo Dart! # doesn't enter here 
fi 
+2

'echo“$ {DART_VER}”'的输出是什么? – anubhava

+0

Dart VM版本:... –

+0

在bash中,它是'-eq'而不是'=='对吧? – Hussain

回答

3

我认为dart --version写出标准错误,而不是标准输出。 (见https://code.google.com/p/dart/codesearch#dart/trunk/dart/runtime/bin/main.cc&sq=package:dart&q=ProcessVersionOption&l=588。)所以,当你看到你的脚本打印Dart VM version: ...,这实际上是从DART_VER=$(dart --version)(它打印Dart VM version: ...到标准错误,并将DART_VER设置为空字符串)而不是echo "${DART_VER}"(它只打印空字符串,再加上一个新队)。

您可以修复,通过改变这样的:

DART_VER=$(dart --version) 

这样:

DART_VER=$(dart --version 2>&1) 

标准错误合并到标准输出捕获。

+1

@janos:我在第一段中提到过这个问题。 OP *认为* echo'$ {DART_VER}“'正在打印'Dart VM版本:...',但实际上输出来自'DART_VER = $(dart --version)'。 – ruakh

+0

哦,你是完全正确的。 !谢谢! –

+0

@sunglim:不客气! – ruakh

相关问题