Respostas:
$-são os sinalizadores de opção atuais definidos pelo próprio shell, na chamada ou usando o setcomando builtin:
$ echo $-
himBH
$ set -a
$ echo $-
ahimBH
"${-#*i}"é uma sintaxe para remoção de string: (da documentação do POSIX )
$ {parâmetro # [palavra]}
Remova o menor padrão de prefixo. A palavra deve ser expandida para produzir um padrão. A expansão do parâmetro resultará em parâmetro, com a menor porção do prefixo correspondida pelo padrão excluída. Se presente, a palavra não começará com um '#' não citado.
$ {parâmetro ## [palavra]}
Remova o maior padrão de prefixo. A palavra deve ser expandida para produzir um padrão. A expansão do parâmetro resultará em parâmetro, com a maior parte do prefixo correspondida pelo padrão excluída.
Portanto, ${-#*i}remova a corda mais curta até o primeiro icaractere:
$ echo "${-#*i}"
mBH
No seu caso, if [ "${-#*i}" != "$-" ]verificando se o seu shell é interativo ou não.
Há um parâmetro de shell $-. No meu caso:
$ echo $-
himB
${-}é o mesmo que $-exatamente ${foo}igual é o mesmo que $foo.
#*isignifica: Excluir (o mínimo possível; não faz diferença aqui) desde o início do valor da variável até (incluindo) o primeiro i.
$ echo "${-#*i}"
mB
Em outras palavras: [ "${-#*i}" != "$-" ]verifica se existe um ivalor na $-variável, ou seja, verifica se o shell é interativo.
Em outras palavras, é uma maneira complicada e não-Bourne compatível de escrever:
case $- in
*i*) ...;;
*) ...;;
esac