Bash несколько ор не работают с негативами - PullRequest
0 голосов
/ 22 января 2020

У меня есть такой бит кода, который работает просто отлично;

if [ "$1" == "something1" ] || [ "$1" == "something2" ] || [ "$1" == "something3" ]; then
    echo "Result is $1"
    # do stuff here if $1 is not equals to one of the above "somethings"
fi
$ ./script.sh something2
Result is something2

Однако, когда я заменяю операторы равенства (==) на не равные (!=), тогда просто больше не работает.

Пример:

if [ "$1" != "something1" ] || [ "$1" != "something2" ] || [ "$1" != "something3" ]; then
    echo "Result is $1"
    # do stuff here if $1 is not equals to one of the above "somethings"
fi
$ ./script.sh something2
Result is something2

Не нужно было печатать Result is something2. Я добавил это в свой bash скрипт #!/bin/bash -x, чтобы увидеть проблему, и там написано + [[ something2 != something1 ]], когда я запускаю скрипт как ./script.sh something2, так что определенно что-то здесь не так.

Я в основном хочу, чтобы он продолжал оператор if, если $1 не равен одному из somethings, в противном случае пропустите.

Чего мне не хватает?

1 Ответ

2 голосов
/ 22 января 2020

Вы можете использовать это.

if [ "$1" != "something1" ] && [ "$1" != "something2" ] && [ "$1" != "something2" ]; then
    echo "Result is $1"
    # do stuff here if $1 is not equals to one of the above "somethings"
fi

Причина - даже если в вашем примере не выполняется одно условие ИЛИ, другие условия ИЛИ выполняются, и команды внутри if выполняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...