2017-07-19 2 views
1

Ich bin neu in Bash und Überprüfung eine Variable ein Problem mit enthält eine ZeichenfolgeString enthält korrekte Version von Java

Works:

foo="abc def ghi" 

if [[ "$foo" =~ "def" ]]; then 
    echo "Match!" 
fi 

funktioniert nicht (Ausgabe Ich habe):

javaVersion="$(java -version)" 

if [[ "$javaVersion" =~ "1.8.0_74" ]]; then 
    echo "Match!" 
fi 

Ich habe manuell überprüft die Variable enthält die Zeichenfolge 1.8.0_74.

Antwort

3

Das Problem ist java -version druckt die Informationen zu stderr(2) Strom statt stdout(1). Sie müssen beide als 2>&1 erfassen, die wörtlich bedeutet schreiben Sie die Standard-Fehler-Ausgangsstrom auch zu Standard-Ausgangsstrom.

javaVersion="$(java -version 2>&1)" 
if [[ "$javaVersion" =~ "1.8.0_74" ]]; then 
    echo "Match!" 
fi 

wird wie erwartet funktionieren.

Auch Sie nicht ein einen regulären Ausdruck Operator für diesen Vergleich, einen einfachen glob Vergleich mit dem test Operator [[ ausreichen würde,

if [[ "$javaVersion" == *"1.8.0_74"* ]]; then 
    echo "Match!" 
fi