"${-#*i}" != "$-" とはどういう意味ですか?

/etc/profileこれを見た後:

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

どういう意味ですか${-#*i}。パラメータ拡張の定義が見つかりません${-

ベストアンサー1

$-呼び出しまたは組み込みコマンドを使用するときにシェル自体setによって設定された現在のオプションフラグは次のとおりです。

$ echo $-
himBH
$ set -a
$ echo $-
ahimBH

"${-#*i}"文字列削除の構文は次のとおりです。POSIX ドキュメント)

${パラメータ#[単語]}

最小プレフィックスパターンを削除します。パターンを生成するには、単語を拡張する必要があります。その後、パラメータ拡張により、プレフィックスの最小部分が削除されたパターンと一致するパラメータを生成する必要があります。存在する場合、その単語は引用符なしの「#」で始まってはいけません。

${パラメータ##[単語]}

最大プレフィックスパターンを削除します。パターンを生成するには、単語を拡張する必要があります。次に、パラメータ拡張によって、プレフィックスの最大部分が削除されたパターンと一致するパラメータを生成する必要があります。

したがって、${-#*i}最初のi文字までの最短文字列を削除します。

$ echo "${-#*i}"
mBH

あなたの場合、if [ "${-#*i}" != "$-" ]シェルがインタラクティブであることを確認してください。

おすすめ記事