${line#*'Caused By'}
é uma instância específica da substituição de variável ${parameter#word}
(como está escrito no manual bash
, e também no padrão POSIX para o shell sh
.
Em ${parameter#word}
, o padrão word
será removido do início do valor de $parameter
. É chamado de "Remover o menor padrão de prefixo" porque removerá a cadeia de caracteres de prefixo menor correspondente ao padrão em word
(com ##
no lugar de #
, remove o maior string de prefixo correspondente).
Neste exemplo específico, a string Caused by
(e qualquer coisa anterior, graças ao *
) é, se existir, removida do valor de $line
. As aspas simples ao redor da string são redundantes.
Ao comparar o resultado da substituição com o valor da própria variável, o teste determina se o valor de $line
contém o texto Caused by
e imprime Yes
se o fizer.
Isso tem o mesmo efeito que
if [[ "$line" == *'Caused by'* ]]; then
echo 'Yes'
fi
em bash
, ksh93
ou zsh
ou
case "$line" in
*'Caused by'*) echo 'Yes'
esac
em qualquer sh
shell.
O loop na pergunta lê "linhas" da entrada padrão. Veja a pergunta " Entendendo" IFS = read -r line " "para uma discussão sobre isso.