![[ "${-#*i}" != "$-" ] sh에서 무엇을 해야 할까요? [복사]](https://linux55.com/image/10564/%5B%20%22%24%7B-%23*i%7D%22%20!%3D%20%22%24-%22%20%5D%20sh%EC%97%90%EC%84%9C%20%EB%AC%B4%EC%97%87%EC%9D%84%20%ED%95%B4%EC%95%BC%20%ED%95%A0%EA%B9%8C%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%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}
$-
이것이 바로 테스트의 목적입니다. 두 문자열이 다르면 존재 i
한다는 의미입니다 $-
. 즉, 쉘이 대화형이라는 의미입니다.