bash поддерживает это изначально,
$ string1="abcmoocow"
$ string2="moo"
$ if [[ $string1 == *$string2* ]]; then echo "Match"; else echo "No Match"; fi
Match
$ string1="abccrowcow"
$ if [[ $string1 == *$string2* ]]; then echo "Match"; else echo "No Match"; fi
No Match
также для исправления вашего примера; change;
if $(echo $1 | grep -c $2) ; then
превратиться в:
if [ -n "$(echo $1 | grep -c $2)" ]; then
(проверяет, возвращает ли grep какие-либо данные)
также обратите внимание, что также можно работать с кодом выхода;
$ echo bob | grep "o" &>/dev/null; echo $?
0
$ echo bob | grep "z" &>/dev/null; echo $?
1
Это документированное поведение:
message
Запишите это сообщение в журнал; если оно не указано, и флаг
-f
не установлен, в журнал записывается стандартный ввод.
К счастью, вы можете добавить необходимую информацию в стандартный ввод логгера:
log()
{
{
printf "DEBUG: $@" # Prepends the prefix.
cat # Outputs the original input.
} | logger -s -t $(basename $0)
}
Передача аргументов в функцию, которая может быть использована как $1
или $@
, не то же самое, что чтение stdin
.
Вам придется сначала получить данные из stdin
. Следующее решение может быть не идеальным, но даст вам подсказку:
#!/bin/bash
log()
{
read INPUT
logger -s -t $(basename $0) "DEBUG: $INPUT"
}
echo "test" | (log)