Какова функция * между двойными скобками? - PullRequest
2 голосов
/ 03 ноября 2019

Я бы хотел понять функцию * в операторе if следующим образом:

if [[ '/bin/somecommand 2>dev/null' ! = *'1'* ]];

- проверить, возвращается ли возвращаемое значение как 1, но если я оставлю его как

if [[ '/bin/somecommand 2>dev/null' ! = '1' ]];

это не проверяет правильное значение. Я просто пытаюсь понять, какова функция * в передней и задней части '1', делает ли это целое число для целей сравнения?

Я пробовал следующую комбинацию

if [[ '/bin/somecommand 2>dev/null' ! = '1' ]];
if [[ '/bin/somecommand 2>dev/null' ! = 1 ]];

Ни один из способов не вернул бы правильный результат, кроме первого с * в передней и задней части «1».

1 Ответ

1 голос
/ 03 ноября 2019

Я предполагаю, что у вас вместо команды были одинарные кавычки вместо одинарных кавычек, а в !=:

[[ `/bin/somecommand 2>dev/null` != *'1'* ]]

в двойном выражении [[ .. ]], выражение справасторона = / == и != интерпретируется как шаблон глобуса, поэтому * означает «любая строка».

По сути, *'1'* будет соответствовать всей строке, содержащей 1 где угодно (например, foo1bar и 3210), в то время как '1' будет точно соответствовать только строке 1.

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