/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}
$-
이것이 바로 테스트의 목적입니다. 두 문자열이 다르면 존재 i
한다는 의미입니다 $-
. 즉, 쉘이 대화형이라는 의미입니다.