$-
to bieżące flagi opcji ustawione przez samą powłokę, podczas wywołania lub za pomocą set
wbudowanego polecenia:
$ echo $-
himBH
$ set -a
$ echo $-
ahimBH
"${-#*i}"
jest składnią do usuwania ciągów: (z dokumentacji POSIX )
$ {parametr # [słowo]}
Usuń najmniejszy wzór prefiksu. Słowo należy rozwinąć, aby uzyskać wzór. Rozszerzanie parametru powinno następnie skutkować parametrem, przy czym najmniejsza część prefiksu jest dopasowana do wzorca usuniętego. Jeśli występuje, słowo nie może zaczynać się od cudzysłowu „#”.
$ {parametr ## [słowo]}
Usuń największy wzór prefiksu. Słowo należy rozwinąć, aby uzyskać wzór. Rozszerzanie parametru powinno następnie skutkować parametrem, przy czym największą część prefiksu dopasowuje wzorzec usunięty.
Więc ${-#*i}
usuń najkrótszy ciąg do pierwszego i
znaku:
$ echo "${-#*i}"
mBH
W twoim przypadku if [ "${-#*i}" != "$-" ]
sprawdzenie, czy twoja powłoka jest interaktywna, czy nie.