В bash, как я могу проверить, если строка начинается с некоторого значения?

Я хотел бы проверить, если строка начинается с “узлов” например “node001”. Что-то вроде

if [ $HOST == user* ]     then     echo yes   fi 

Как я могу сделать это правильно?


Обновление:

Огромное спасибо! Я дальше нужно комбинировать выражения, чтобы проверить, если узел является либо “пользователь1” или начинается с “узлов”

if [ [[ $HOST == user1 ]] -o [[ $HOST == node* ]] ];   then   echo yes  fi  > > > -bash: [: too many arguments 

Как это правильно сделать?

if [ [[ $HOST == user1 ]] -o [[ $HOST == node* ]] ];   then   echo yes  fi 

не работает, потому что все [, [[ и тест признают же нерекурсивный грамматики. см. Раздел условные выражения в ваш баш Man-странице.

Как в стороне, SUSv3 говорит

В KornShell-производные условную команду (двойной кронштейн [[]]) был удален из оболочки командного языка Описание В начале предложения. Были высказаны возражения, что реальной проблемой является неправильное использование тест – команда ([), и поставив его в раковину-это неправильный способ решить проблему. Вместо этого, надлежащей документации и новую оболочку зарезервированное слово (!) являются достаточными.

Тесты, которые требуют многократного тестирования операции можно проделать в оболочке уровне с использованием индивидуальных вызовов тестирования и командной оболочки logicals, а не использованием ошибок -О’ флаг тестирования.

вы должны были бы написать так, но тест не поддерживает его:

if [ $HOST == user1 -o $HOST == node* ];   then   echo yes  fi 

тест использует = для строковых равенства, главное он не поддерживает сопоставление с образцом.

case / esac имеет хорошую поддержку для сопоставления с образцом:

case $HOST in user1|node*) echo yes ;; esac 

это имеет дополнительное преимущество, что оно не зависит от баш, синтаксис является портативным. от одиночных ОС Unix Спецификация, командного языка оболочки:

case word in     [(]pattern1) compound-list;;     [[(]pattern[ | pattern] ... ) compound-list;;] ...     [[(]pattern[ | pattern] ... ) compound-list] esac 
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Оставить комментарий

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*