Сравнение строк в bash. [[: не найти
Я пытаюсь сравнить строки в bash. Я уже нашел ответ о том, как это сделать на stackoverflow. В скрипте я пытаюсь, я использую код, представленный Адамом в упомянутом вопросе:
#!/bin/bash
string='My string';
if [[ "$string" == *My* ]]
then
echo "It's there!";
fi
needle='y s'
if [[ "$string" == *"$needle"* ]]; then
echo "haystack '$string' contains needle '$needle'"
fi
Я тоже пробовал подход с ubuntuforums что вы можете найти в 2-й пост
if [[ $var =~ regexp ]]; then
#do something
fi
В обоих случаях я получаю ошибку:
[[: not found
что я делаю не так?
6 ответов:
как вы запускаете свой скрипт? Если вы сделали с
$ sh myscript
вы должны попробовать:
$ bash myscript
или, если скрипт исполняемым:
$ ./myscript
ш и Баш два разных снарядов. В то время как в первом случае вы передаете свой скрипт в качестве аргумента интерпретатору sh, во втором случае вы решаете на самой первой строке, какой интерпретатор будет использоваться.
Это первая строка в скрипте:
#!/bin/bash
или
#!/bin/sh
оболочка sh выдает это сообщение об ошибке, а не bash
у меня была такая проблема при установке Heroku Toolbelt
вот как я решил проблему
$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 ago 15 2012 /bin/sh -> dash
как вы можете видеть, /bin/sh-это ссылка на " тире "(а не bash), и
[[
это Баш синтаксическая сладость. Поэтому я просто заменил ссылку на /bin / bash. осторожно, используя rm, как это в вашей системе!$ sudo rm /bin/sh $ sudo ln -s /bin/bash /bin/sh