printf %s\\n "$-"
단일 문자 옵션을 단일 문자열로 나열합니다.
이 매개 변수는 다음과 같이 사용할 수도 있습니다.
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
먼저 셸 -f
이름 확장을 비활성화 하고 동시에 $-
존재하는 경우 값을 저장합니다 $1
. 다음으로 glob이 발생하지 않으며 마지막 +f
ilename 확장이 다시 한 번 활성화되고 비활성화 될 수도 있습니다.
예를 들어,에 -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 세트를 가져 와서 부모를 명시 적으로 무시한 것 (예를 들어 )을 상속받지 않기 때문에 이것을 단지 나의 서브 쉘 이라고 인쇄 할 것이다 .trap
trap
trap '' 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
저에게 효과적입니다)