2013-12-15 40 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

相關問題