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