[ "${-#*i}" != "$-" ] sh에서 무엇을 해야 할까요? [복사]

[ "${-#*i}" != "$-" ] sh에서 무엇을 해야 할까요? [복사]

/etc/profileCentOS 시스템에서 다음과 같은 귀여운 코드 조각을 발견했습니다.

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}" != "$-" ]쉘이 대화형인지 확인하십시오.

$-셸 실행을 위한 플래그가 포함되어 있습니다(예: himBHi이 대화형임을 나타냄). 첫 번째 부품 이후에 부품을 생산합니다 ${-#*i}(이 경우). 없을 경우 제작됩니다.$-imBHi$-${-#*i}$-

이것이 바로 테스트의 목적입니다. 두 문자열이 다르면 존재 i한다는 의미입니다 $-. 즉, 쉘이 대화형이라는 의미입니다.

관련 정보