bash & 변수를 사용하여 "set"을 사용할 시기를 결정합니까? [폐쇄]

bash & 변수를 사용하여 "set"을 사용할 시기를 결정합니까? [폐쇄]

비슷한 일을 하고 그 이유를 알고 싶을 때;

[ ${debug:=0} -gt 0 ] && set -x || set +x

조건이 set -x활성화되었는지 여부입니다. 문제는 IF를 먼저 ${debug}사용할 수 없다는 것입니다 .set +xdebug=1

테스트 사례:

dtest(){ [ "${d:=0}" -gt 0 ] && set -x || set +x; var="abc"; echo "${var}"; }
d=0;dtest
d=1;dtest
d=0;dtest

누군가가 이 질문을 했는지는 확실하지 않으며 아마도 어떤 표현을 사용해야 할지 잘 모르겠습니다.

답변1

함수에서 xtrace를 재설정해야 합니다.

dtest(){
  [ "${d:=0}" -gt 0 ] && set -x
  var="abc"
  echo "${var}"
  set +x
}
d=0;dtest
d=1;dtest
d=0;dtest

또는 서브쉘을 사용하십시오:

dtest(){
  [ "${d:=0}" -gt 0 ] && set -x || set +x
  var="abc"
  echo "${var}"
}
d=0;(dtest)
d=1;(dtest)
d=0;(dtest)

답변2

이것은 나에게 잘 작동합니다.

set -x처음부터 비활성화되어 d=0설정되지 않습니다.

$ dtest(){ [ "${d:=0}" -gt 0 ] && set -x || set +x; var="abc"; echo "${var}"; }
$ d=0;dtest
abc

여기서는 함수 중간에 설정되어 있으며 마지막 두 명령이 추적에 인쇄됩니다.

$ d=1;dtest
+ var=abc
+ echo abc
abc

여기서는 set -x기능의 마지막 실행부터 적용되며 기능 중간에 비활성화됩니다. 실행 후 마지막 두 명령에 대한 추적은 인쇄되지 않습니다 set +x.

$ d=0;dtest
+ d=0
+ dtest
+ '[' 0 -gt 0 ']'
+ set +x
abc

함수 마지막에 무조건 추적을 비활성화하려면 pair 를 추가해야 합니다 set +x.

또는 변경 사항이 함수 내에서만 적용되도록 하려면 local -(현재 버전의 Bash에서) $-변경하기 전에 함수 시작 부분에 값을 수동으로 저장하고 저장된 값을 기반으로 추적 끝을 설정/재설정할 수 있습니다. 값. 서브셸에서 함수를 실행하면 비슷한 효과가 있지만 이 경우 함수 내의 변수에 대한 변경 사항도 함수 외부에서 볼 수 없습니다.

관련 정보