인수없이 set 명령은 무엇을합니까?


22

set인수없는 명령 은 무엇을 합니까?

보시다시피 env명령 과 마찬가지로 알파벳 순서로 환경 변수를 인쇄합니다 . 또한 다음과 같은 몇 가지 다른 정보 (변수? 기능?)를 인쇄합니다.

__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote () 
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}
quote_readline () 
{ 
    local quoted;
    _quote_readline_by_ref "$1" ret;
    printf %s "$ret"
}

그것은 무엇이며 어디에서 왔습니까?

set인수없이 명령 에 대한 정보를 찾을 수 없습니다 . 사실 나는 리눅스 배포판에 man대한 페이지 가 전혀 없다 set.


1
"이 내장은 너무 복잡해서 자체 섹션이 필요합니다." 문서
galath

답변:


17

set 셸 내장은 환경 변수뿐만 아니라 모든 셸 변수와 목록 끝에 표시되는 셸 함수를 표시하는 셸 내장입니다.

변수는 행이 실행되거나 소싱 될 때 변수를 설정할 수있는 구문과 함께 표시됩니다.

에서 bash 매뉴얼 페이지 :

옵션이나 인수가 제공되지 않으면 set은 현재 로케일에 따라 모든 쉘 변수 및 함수의 이름과 값을 현재 설정된 변수를 설정하거나 재설정하기위한 입력으로 재사용 할 수있는 형식으로 표시합니다.

다른 쉘에서 동작은 반드시 동일하지는 않습니다. 예를 들어, ksh set쉘 기능을 표시하지 않습니다.


3
ksh쉘 변수에 함수 정의를 저장하지 않기 때문 입니다.
cuonglm

2
@cuonglm dgk의 현명한 디자인 결정! ;-)
jlliagre

7

set출력이 있고 which set아무것도 반환하지 않기 때문에 사용중인 쉘의 일부임을 알 수 있습니다.

man bash 는 여러 번 언급했지만 온라인 문서 에서 더 쉽게 연결할 수 있습니다 .

이 내장은 너무 복잡하여 자체 섹션이 필요합니다. set을 사용하면 쉘 옵션의 값을 변경하고 위치 매개 변수를 설정하거나 쉘 변수의 이름과 값을 표시 할 수 있습니다.

set의 통화 사양은 다음과 같습니다.

set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]

명령 줄의 man에서 찾으려면

/set.*abef

which set껍질에 따라 다릅니다. 최소한 zsh당신을 위해 그것을보고 할 것입니다. 자세한 내용은 이것을 읽을 수도 있습니다 .
cuonglm

큰 시장 지배력을 가지고 있기 때문에 bash 이외의 것에 관한 질문은 아니며, 기본이 아닌 쉘을 사용하는 사람은이 질문을 할 필요가 없습니다.
user1133275

6

set쉘 내장 및 쉘 옵션 및 위치 매개 변수 설정 및 설정 해제에 사용됩니다.

인수 set가 없으면 현재 로케일로 정렬 된 모든 쉘 변수 (현재 세션의 변수 및 변수)를 인쇄합니다 .

bash 문서를 읽을 수도 있습니다 .


몇 가지주의 사항이 있습니다.

set "$var"var값을 할당 합니다 $1. 만약 $var시작과 함께 -또는 +다음 $var내용이 쉘 옵션의 순서로 처리 하였다. $var유효하지 않은 옵션이 있으면 대부분의 POSIX 쉘이 오류를 인쇄합니다. yashzsh에서 sh, ksh에뮬레이션은 오류를 인쇄 할뿐만 아니라, 유효한 옵션을 설정하지 않습니다. yash첫 번째 잘못된 옵션의 옵션 설정을 중지 하는 동안 zsh모든 옵션 이 할당됩니다. 에서 yash:

var=-fxd; set "$var"

fx에서 발표 할 예정이다 $-, 반면 :

var=fdx; set "$var"

f존재 $-합니다. 두 경우 모두, f그리고 x에 발표 할 예정 $-으로 zsh있는 shksh에뮬레이션.

이러한 상황으로부터 보호하기 위해 또는로 --시작하는 위치 매개 변수를 설정하는 첫 번째 인수로 전달할 수 있습니다 .-+

var=-fdx; set -- "$var"

콘텐츠에 관계없이에 할당 $var됩니다 $1.

set -- 추가 인수가 없으면 모든 위치 매개 변수가 설정 해제됩니다.

첫 번째 인수가 -인 경우 동작이 지정되지 않은 것입니다. 알려진 모든 POSIX 쉘은 설정을 해제 x하고 v옵션을 제외하고 (을 제외하고 posh) -위치 매개 변수 뒤에 다음 을 지정합니다 .

set -xv - -f

에 할당 -f됩니다 $1. set -또한 위치 매개 변수를 설정 해제하지 않았습니다. Schily osh 도 그렇게 행동합니다. 가보 sh 설정 vx옵션 이 없습니다 .

POSIX 쉘 예외는 첫 번째 위치 매개 변수로 yash취급 -됩니다.

$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx

Schily- 는 논쟁에 참여 한다면 아무것도하지 않을 것입니다 :

$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s

$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs

사람들이 어디하지만 처음에 링크 왜 난 당신이 사이에 다른 언급하는 것 같아서 ... 결코 이해하지 못할 set -- $unset, set - $unset, set $unset, 그리고 set "$unset"그것은 일반적으로 처음부터 문제가 그런 종류의 사람들을 얻을 그 불일치의 - 등등을.
mikeserv

@ mikeserv : 글쎄, 나는 더 많은 세부 사항을 추가했지만, 사용될 때 당신이 무엇을 의미하는지 얻지 못했습니다 $unset.
cuonglm

@cuonglm이 명령 set $unsetset설정되지 않은 변수 와 동일하게 작동 합니다. 그러나 실제로 설정되지 않은 변수 set "$unset" 라면 주목할 것 unset입니다. A set - $unset는 bash에서 -v-x설정 옵션을 제거합니다 .

@BinaryZebra : 아, 물론 나에게는 사용하는 것이 좋습니다 unset_var. 또한 set "$unset"실제로 $1비어 있음으로 설정 되어 있습니다. 그것은 쉘 확장에 관한 것이지 엄격하게 set는 아니기 때문에 언급하지 않았습니다.
cuonglm 2012 년

1
@mikeserv :의 동작 poshyash가 다르게 -나타납니다. 업데이트 된 내용을 읽을 수 있습니다 (개선 할 수 있음).
cuonglm

2

bash 쉘 내부에서 작업하는 경우을 입력하십시오 help set.

인쇄 된 도움말의 끝에서 다음을 읽으십시오.

ARG가 제공되지 않으면 모든 쉘 변수가 인쇄됩니다.

따라서 no 인수 set는 쉘에 알려진 모든 변수를 인쇄합니다.


내가 궁금해 같은 경우 set -x; set도움이 될 것입니다
ILMostro_7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.