set
둘 shopt
다 다양한 옵션을 제어하는 셸 내장 명령입니다. 어떤 옵션이 어떤 명령으로 설정되는지, 어떤 옵션이 설정/해제되는지( set -o/+o
, shopt -s/-u
) 잊어버리는 경우가 많습니다. 동일한 작업을 수행하는 것처럼 보이는(그리고 해당 작업을 수행하기 위한 매개변수가 다른) 두 개의 다른 명령이 있는 이유는 무엇입니까? 어떤 옵션이 어떤 명령과 함께 사용되는지 기억하는 쉬운 방법/니모닉이 있습니까?
답변1
내가 아는 한, 이러한 set -o
옵션은 다른 Bourne 스타일 쉘(주로 ksh)에서 상속된 옵션이며 이러한 shopt
옵션은 bash에만 적용됩니다. 제가 아는 한, 논리가 없습니다.
답변2
차이점은 bash에서 사용하는 환경 변수가 변경되었다는 것입니다. 명령을 사용 set
하여 결과를 로 설정합니다. 명령 $SHELLOPTS
을 사용 shopt
하여 결과를 로 설정합니다 $BASHOPTS
.
답변3
set
POSIX 7은 다음과 같습니다.set - 옵션 및 위치 매개변수 설정 또는 설정 해제 pubs.opengroup.org |
함께 있을 수도 있음@Gilles가 언급한 역사.
답변4
책 "Bash를 사용한 Linux 쉘 스크립팅", 페이지 63에서:
역사적으로 이
set
명령은 옵션을 켜거나 끄는 데 사용되었습니다. 옵션의 수가 많아질수록set
옵션은 단일 문자 코드로 표시되므로 사용이 점점 어려워집니다. 따라서 Bash는shopt
(주택 옵션) 명령은 문자 대신 이름으로 옵션을 켜고 끕니다. 일부 옵션은 문자로만 설정할 수 있습니다. 다른 것들은shopt
명령에서만 사용할 수 있습니다. 이로 인해 특정 옵션을 찾고 설정하는 것이 혼란스러운 작업이 됩니다.