[ "${-#*i}" != "$-" ] sh で何をすべきですか? [コピー]

[ "${-#*i}" != "$-" ] sh で何をすべきですか? [コピー]

/etc/profileCentOSシステムでは、次のようなかわいいコードスニペットを見つけました。

for i in /etc/profile.d/*.sh ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

私はそれが.shファイルからロードされることを知っていますが、/etc/profile.d最後のifステートメントについて混乱していますif [ "${-#*i}" != "$-" ]。この構文の機能は何ですか?どこで探すべきかさえわかりません。

答え1

デフォルトでは、[ "${-#*i}" != "$-" ]シェルが対話型であることを確認してください。

$-シェルを実行するためのフラグが含まれています(たとえば、himBHシェルiが対話型であることを示します)。最初の部品の後に部品を製造します${-#*i}(この場合)。ない場合は製作されます。$-imBHi$-${-#*i}$-

これがまさにテストの目的です。 2つの文字列が異なる場合は存在iすることを意味します$-。つまり、シェルが対話型であることを意味します。

関連情報