bash, если предложение содержит И логический оператор не работает

#bash #if-statement #conditional-statements #script

Вопрос:

Я создаю сценарий bash, в котором есть 2 условия в операторе IF, связанные оператором логики AND, но он жалуется при выполнении. Просто на заметку, если я выполню каждое условие в нем уникально, если оба работают просто отлично. Проблема возникает, когда я пытаюсь выполнить оба действия оператором-a (И). Вот он:

 if [[ "$1" =~ ".com" -a test "$#" -eq 1 ]]
then
echo "olalá"
fi
 

Я буду признателен за любой совет по этому вопросу.

Комментарии:

1. Вам не нужна эта test команда там; вы уже находитесь в середине логического выражения. if [[ "$1" =~ ".com" -a "$#" -eq 1 ]]

Ответ №1:

-a является оператором И в [ ] тестовом выражении, но [[ ]] вместо этого используются условные выражения amp;amp; . Кроме того, в выражении лица есть ошибка, которой там вообще не место. test Вот исправленная версия:

 if [[ "$1" =~ ".com" amp;amp; "$#" -eq 1 ]]
 

Вы могли бы эквивалентно использовать два отдельных [[ ]] выражения и использовать amp;amp; между ними:

 if [[ "$1" =~ ".com" ]] amp;amp; [[ "$#" -eq 1 ]]
 

(Если бы вы использовали [ ] выражения, это был бы предпочтительный метод из-за двусмысленностей в синтаксисе, включающем -a , -o , и тому подобное; но с [[ ]] , двусмысленности нет, и любой метод работает нормально.)