Bash не сравнивает строки должным образом

Это мой bash файл

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

И вот вывод терминала:

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

Я не понимаю, что не так. Есть ли другой способ сравнения строк?

2 ответа

Решение

Если вы хотите написать сценарий bash, не пишите сценарий оболочки POSIX: измените строку shebang на:

#!/bin/bash

С другой стороны, если вы хотите написать сценарий переносимой оболочки, используйте case заявление:

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

+ Изменить

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

в

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

,

Другие вопросы по тегам