2009-11-28 2 views

ответ

2
if [ "x$m" = "x-" ]; then 
    echo "is a dash" 
else 
    echo "is not a dash" 
fi 

использует сравнение строк, приводит все, и исключает возможные [ команды переключения линии путаницы (на некоторых оболочках не совсем Posix), если $m начинается с -.

4

-eq используется для проверки равенства целых чисел. Для проверки строки равенства, используйте вместо =:

if [ "$m" = - ] 

Смотрите страницу человека для test для получения более подробной информации.

+2

Важное примечание: если '$ m' - пустая строка, это будет оцениваться синтаксической ошибкой. Чтобы этого избежать, общая идиома должна проверять 'if [" x $ m "= x-]'. –

+2

На самом деле, с '' $ m "' котировками вокруг '$ m', в' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Причина цитирования материала, начинающегося с 'x', заключается в том, чтобы предотвратить проблемы, когда' $ m' начинается с '-' и' ['интерпретирует его как переключатель командной строки. – ndim

+1

@Adam Я не получаю синтаксическую ошибку в bash (версия 3.1). Пустые двойные кавычки рассматриваются как первый аргумент. –

1

Оператор '-eq' выполняет арифметическое сравнение. Вместо этого вам нужно использовать оператор '='. т.е.:

если тест «$ m» = '-'; затем эхо «тире»; еще эхо "не имеет тире"; fi

 Смежные вопросы

  • Нет связанных вопросов^_^