printf %s\\n "$-"
단일 문자 옵션을 단일 문자열로 나열합니다.
이 매개 변수는 다음과 같이 사용할 수도 있습니다.
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
먼저 셸 -f이름 확장을 비활성화 하고 동시에 $-존재하는 경우 값을 저장합니다 $1. 다음으로 glob이 발생하지 않으며 마지막 +filename 확장이 다시 한 번 활성화되고 비활성화 될 수도 있습니다.
예를 들어,에 -f대한 값을 $-처음 저장할 때 ilename 확장이 이미 비활성화 된 경우 저장된 값은 (적어도)입니다 .
f
그리고 set다시 실행 되면 다음과 같이 작동합니다.
set +f -f
시작한 곳을 바로 돌려줍니다.
set +o
쉘 재진입에 안전한 형식으로 모든 set테이블 쉘 옵션 ( 유능한 단어에 대한 Jason의 답변shopt -단어입니까?-옵션) 을 나열합니다. 그런 식으로 다음을 수행 할 수도 있습니다.
state=$(set +o)
set -some -crazy -options
eval "$state"
쉘 옵션의 상태를 각각 저장, 변경 및 복원합니다.
한 번에 shopt이온 및 set테이블 옵션 을 처리하려면
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
인수 set 없이 호출 하여 현재 설정되어있는 쉘의 모든 변수 목록을 추가 할 수도 있습니다 ( 쉘에 재 입력 할 때도 인용). 또한 bash에서 명령 typeset -fp을 추가하여 현재 선언 된 모든 셸 함수도 포함시킬 수 있습니다. eval준비가되면 모든 것을 하나로 묶을 수 있습니다 . 당신은 alias더 많은 것을 위해 인수없이 전화 할 수도 있습니다 . 그래도 ... 나는 "$@"당신이 bash배열에 먼저 넣어야 할 것이 있다고 생각 set합니다.
아니, 또한 있습니다 trap. 이건 좀 재미있어 보통:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
서브 쉘이 새로운 프로세스이고 자체의 s 세트를 가져 와서 부모를 명시 적으로 무시한 것 (예를 들어 )을 상속받지 않기 때문에 이것을 단지 나의 서브 쉘 이라고 인쇄 할 것이다 .traptraptrap '' INT
하나:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap명령 대체 서브 쉘에서 처음으로 실행되는 유일한 명령 인 경우, 쉘에 traps안전하게 다시 입력하기 위해 인용 된 형식으로 현재 설정된 상위 쉘 목록을 재생산한다는 점에서 특별히 작동 합니다. 당신이 할 수 있도록 save_traps, 다음 set 인수없이 - 나머지 모두를 이미 언급 - 거의 모든 쉘 상태에 대한 잠금을 얻을 수 있습니다. 그래도 원래 쉘 var 속성 을 명시 적으로 추가 export -p하고 readonly -p복원 할 수 있습니다 .
어쨌든 충분합니다.
set +o및shopt?를 모두 사용해야합니다 . (shopt단어가 될 수 있다는 것은settable매뉴얼 페이지에서 사용되므로shoptable저에게 효과적입니다)