$-
это флаги текущей опции, установленные самой оболочкой, при вызове или с помощью set
встроенной команды:
$ echo $-
himBH
$ set -a
$ echo $-
ahimBH
"${-#*i}"
такое синтаксис для удаления строки: (из документации POSIX )
$ {Параметр # [слово]}
Удалите самый маленький образец префикса. Слово должно быть расширено, чтобы произвести образец. Расширение параметра должно затем привести к параметру с наименьшей частью префикса, совпадающей с удаленным шаблоном. Если присутствует, слово не должно начинаться с кавычки без кавычек.
$ {Параметр ## [слово]}
Удалить самый большой образец префикса. Слово должно быть расширено, чтобы произвести образец. Расширение параметра должно затем привести к параметру, при этом наибольшая часть префикса соответствует удаленному шаблону.
Поэтому ${-#*i}
удалите самую короткую строку до первого i
символа:
$ echo "${-#*i}"
mBH
В вашем случае if [ "${-#*i}" != "$-" ]
проверка, является ли ваша оболочка интерактивной или нет.