![[ "${-#*i}" != "$-" ] sh で何をすべきですか? [コピー]](https://linux33.com/image/10564/%5B%20%22%24%7B-%23*i%7D%22%20!%3D%20%22%24-%22%20%5D%20sh%20%E3%81%A7%E4%BD%95%E3%82%92%E3%81%99%E3%81%B9%E3%81%8D%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
/etc/profile
CentOSシステムでは、次のようなかわいいコードスニペットを見つけました。
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}
(この場合)。ない場合は製作されます。$-
i
mBH
i
$-
${-#*i}
$-
これがまさにテストの目的です。 2つの文字列が異なる場合は存在i
することを意味します$-
。つまり、シェルが対話型であることを意味します。