Большая часть программного обеспечения Linux является бесплатным. Распространяя исходный код с некоторыми инструкциями по компиляции, а не с двоичными файлами, у вас есть возможность просмотреть или даже отредактировать исходный код перед его компиляцией. Таким образом, вы можете быть уверены в том, что программа действительно делает и что она не вредна.
Вы получаете сообщение об ошибке "слишком много аргументов", так как [... ]
не понимает оператор =~
(, используемый в bash
для сопоставления с регулярным выражением ). Поскольку [... ]
не понимает оператора, он рассматривается как строка. Затем у вас есть [... ]
с тремя строками внутри, и они не удовлетворяют семантическим требованиям для правильного теста, поэтому bash
ошибки на этом этапе.
В bash
вы должны использовать =~
внутри [[... ]]
.
Однако я предполагаю, что в этом тесте вы хотели бы увидеть, содержит ли $message
$checkword
в качестве подстроки. Это также можно сделать с помощью
[[ "$message" == *"$checkword"* ]] && sendY
или с помощьюcase... esac
:
case $message in
*"$checkword"*) sendY
esac
Таким образом, вам не нужно беспокоиться о $checkword
содержании символов, которые могут быть специальными в регулярных выражениях.
Вам также необходимо двойные кавычки $message
в echo $message
,или вы можете получить неожиданный вывод, если $message
содержит подстановочные символы имени файла, такие как *
.
Связанные:
printf '%s\n' "$message"
, чем echo "$message"
для данных, предоставленных пользователем -)#!
-строки)Вы также можете использовать это вместо первой операции в скрипте:
case $message in
*[!\ ]*) # contains non-space
message='``` '"$message"' ```' ;;
*) # contains nothing or only spaces
message=
esac
Использование case... esac
в обоих местах сделало бы ваш скрипт (по крайней мере тех битов, которые вы показали ), переносимыми на любуюsh
-подобную оболочку.