我正在查看 /etc/profile 檔案,發現一個奇怪的 if 陳述句。有人可以讓我知道這意味著什么嗎?
我指的是第二個 if 陳述句if [ "${-#*i}" != "$-"]。
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
uj5u.com熱心網友回復:
$-輸出 shell 正在運行的選項串列。i在的輸出中$-表示 shell 是互動式的。
${var#expr}從var與expr.匹配的左側部分的值中洗掉。expr是一個球體。在expr不匹配的情況下,只輸出原始字串。
因此${-#*i}獲取 的值$-并從左側洗掉匹配的部分*i。
例如:$-是himBHs。*i從左邊開始匹配的部分是hi。所以hi從左邊將被洗掉。所以${-#*i}會mBHs。
https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
有人可以讓我知道這意味著什么嗎?
我相信這是檢查會話是否是互動式的一種奇怪的方式。
我非常喜歡并推薦case "$-" in *i*)可讀性和可移植性。還有https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html。
uj5u.com熱心網友回復:
這是一個 hack 比較,似乎旨在與沒有==運算子和模式匹配功能的shell 一起使用。它依賴于檢查之后是否$-保持不變,i以及嘗試從其值的開頭剝離之前的所有內容。不幸的是,它可能仍然無法按預期作業,因為即使!=操作員也不常見。在!與運營商一起=應改為使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407341.html
標籤:
