2015-05-31 3 views
1

Я попытался предложение на How do I compare two string variables in an 'if' statement in Bash?Сравнивая переменную строки в Bash

, но это не работает для меня.

У меня

if [ "$line" == "HTTP/1.1 405 Method Not Allowed" ] 
then 
    <do whatever I need here> 
else 
    <do something else> 
fi 

Независимо от того, он всегда идет к другому заявлению. Я даже вторгаюсь в $ line перед этим, а затем копировал и вставлял результат, просто чтобы убедиться, что строка правильная.

Любая помощь в том, почему это происходит, будет с благодарностью.

+0

Возможно, новая версия после http-версии? – SMA

+0

'test' использует одиночный' = 'для сравнения строк, а не double' == ' –

+0

Кстати, вместо эхо-строки (которая не позволит вам увидеть невидимые символы) попробуйте использовать формат bash printf% q для показать строку как строку bash: 'printf% q \\ n" $ line "' (Кавычки важны.) – rici

ответ

2

Если вы прочитали эту строку из совместимого сетевого подключения HTTP, она почти наверняка имеет символ возврата каретки в конце (\x0D, часто представленный как \r), поскольку протокол HTTP использует линии с завершающим линией CR-LF.

Таким образом, вам необходимо удалить или игнорировать CR.

Вот несколько вариантов, если вы используете Баш:

  1. Удалите CR (если таковой имеется) от линии, используя Баш найти и заменить синтаксис:

    if [ "${line//$'\r'/}" = "HTTP/1.1 405 Method Not Allowed" ]; then 
    
  2. Используйте сравнение Глоб сделать спичку префикс (требуется [[ вместо [, но это лучше, во всяком случае):

    if [[ "$line" = "HTTP/1.1 405 Method Not Allowed"* ]]; then 
    
  3. Вы можете использовать регулярное выражения сравнения в [[ сделать подстроку, возможно, с регулярным выражением:

    if [[ $line =~ "Method Not Allowed" ]]; then 
    

    (. Если вы используете регулярное выражение, чтобы убедиться, что операторы регулярных выражений не приводится)

+0

Хорошо, попробовал оба из ваших вариантов выше, но все равно получаю только «чужую» версию. – bmcgonag

+0

Могу ли я как-то совместить часть текста с методом «Не разрешено»? – bmcgonag

+0

@bmcgonag: Конечно. (Если вы используете bash.) 'If [[" $ line "== *" Method Not Allowed "*]]; затем ... '(Но если мои решения не сработали, возможно, вы не используете bash. Пожалуйста, проверьте.) – rici