Yanıtlar:
$-
Kabuk tarafından, başlatma sırasında veya set
builtin komutunu kullanarak ayarlanan geçerli seçenek bayrakları :
$ echo $-
himBH
$ set -a
$ echo $-
ahimBH
"${-#*i}"
dize kaldırma sözdizimi: ( POSIX belgelerinden )
$ {Parametre # [kelime]}
En Küçük Önek Şablonunu Kaldırma. Bir kalıp oluşturmak için kelime genişletilecektir. Parametre genişlemesi daha sonra, önekin en küçük kısmı silinmiş kalıpla eşleştirilen parametreyle sonuçlanır. Eğer varsa, kelime bir alıntı olmadan '#' ile başlamaz.
$ {Parametre ## [kelime]}
En Büyük Önek Şablonunu Kaldırma. Bir kalıp oluşturmak için kelime genişletilecektir. Parametre genişlemesi daha sonra, önekin en büyük kısmı silinmiş kalıpla eşleştirilen parametreyle sonuçlanır.
Bu yüzden ${-#*i}
ilk i
karaktere kadar en kısa dizgiyi kaldırın :
$ echo "${-#*i}"
mBH
Senin durumunda, if [ "${-#*i}" != "$-" ]
kabuğunun etkileşimli olup olmadığını kontrol et.
Bir kabuk parametresi var $-
. Benim durumumda:
$ echo $-
himB
${-}
aynıdır $-
aynen böyle ${foo}
aynıdır $foo
.
#*i
anlamına gelir: Sil (mümkün olduğu kadar az; burada bir fark yaratmaz) değişken değerinin başından birincisine kadar (dahil) i
.
$ echo "${-#*i}"
mB
Başka bir deyişle: değişkenin değerinde [ "${-#*i}" != "$-" ]
bir i
değer olup $-
olmadığını kontrol eder, yani kabuğun etkileşimli olup olmadığını kontrol eder.
Başka bir deyişle, yazmak için kıvrımlı ve Bourne uyumlu bir yöntemdir:
case $- in
*i*) ...;;
*) ...;;
esac