bash脚本 - 字符串比较会产生意外结果

时间:2013-12-15 06:53:36

标签: bash dart stdout stderr

我已经搜索了几个答案,但这些答案无法应用于我的问题。

问题代码如下。

我认为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

1 个答案:

答案 0 :(得分: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)

将标准错误合并到标准输出中以进行捕获。