Я пытаюсь определить, содержит ли строка тире, но мне кажется, что ничего не работает (я новичок в оболочке).
if [ "$m" -eq "-" ] then echo "has dash" else echo "has no dash" fi
-eq используется для проверки равенства целых чисел. Чтобы проверить на равенство строк, используйте = вместо:
-eq
=
if [ "$m" = - ]
Для получения дополнительной информации см. Справочную страницу для test.
test
if [ "x$m" = "x-" ]; then echo "is a dash" else echo "is not a dash" fi
Использует сравнение строк, цитирует все и избегает возможных [ путаницы при переключении командной строки (в некоторых оболочках с не совсем Posix), если $m начинается с -.
[
$m
-
Оператор '-eq' выполняет арифметическое сравнение. Вместо этого вам нужно использовать оператор '='. то есть:
if test "$ m" = '-'; затем эхо "это тире"; еще эхо "не имеет тире"; фи