/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}" != "$-" ]
シェルがインタラクティブであることを確認してください。