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
,