2011-08-18 2 views
1

Ce fichier est mon bashBash ne compare pas correctement les chaînes

#!/bin/sh 
ENV=DEV 
echo "env: $ENV" 
if [[ "$ENV" == DEV* ]]; then 
    RUNTIME_CLASSPATH=$(cat ../build/dev.classpath) 
    echo "cp: $RUNTIME_CLASSPATH" 
fi 
echo "done" 

Et voici la sortie du terminal:

~proj/bin$ ./test.sh 
env: DEV 
./test.sh: 7: [[: not found 
done 

Je ne comprends pas ce qui ne va pas. Existe-t-il une autre façon de faire des comparaisons de chaînes?

Répondre

5

Si vous voulez écrire un script bash, alors ne pas écrire un script shell POSIX: changer votre ligne de tralala à:

#!/bin/bash 

D'autre part, si vous voulez écrire un script shell portable , utilisez l'instruction case:

case "$ENV" in 
    DEV*) 
    RUNTIME_CLASSPATH=$(cat ../build/dev.classpath) 
    echo "cp: $RUNTIME_CLASSPATH" 
    ;; 
esac 
-1

changement

if [[ "$ENV" == DEV* ]]; then 

à

if [ "$ENV" == "DEV" ]; then 

.

+0

Bien que cet extrait de code peut résoudre la question, y compris une explication * comment * et * pourquoi * cela résout le problème [pourrait vraiment aider] (// meta.stackexchange.com/ q/114762) pour améliorer la qualité de votre message. Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, pas seulement pour la personne qui demande maintenant! S'il vous plaît [modifier] votre réponse pour ajouter une explication, et donner une indication des limites et des hypothèses qui s'appliquent. –

Questions connexes