자세한 수준 옵션이 있는 bash 기능 세트가 있습니다. 설정값에 따라 다양한 출력 레벨이 생성됩니다. 세부 수준은 각 기능에 따라 다릅니다.
하지만 환경 변수도 있습니다. 그 중 하나는 자세한 수준도 지정합니다. 새로운 터미널 쉘에 영향을 미치도록 설계된 글로벌 장황한 도구입니다. 환경 변수를 사용하여 레벨 1로 설정하면 사용 가능한 터미널 명령의 요약이 인쇄됩니다.
자세한 위치 인수를 사용하여 함수가 호출되고 환경 변수도 설정되어 있다고 가정하면 대부분의 사용자는 어떤 동작을 기대합니까? 로컬 상세 설정을 적용하시겠습니까, 아니면 환경 변수 수준을 사용하시겠습니까?
답변1
함수는 서브쉘이 아닙니다. 함수의 변수에 대한 모든 변경 사항은 추가하지 않는 한 전파됩니다.local
함수를 괄호로 묶어서 하위 쉘로 만들 수 있습니다.()
예에서 test.sh
:
#!/bin/env bash
function amiasubshell {
DISPLAY=$1
echo amiasubshell: $DISPLAY
}
function nobuticanfakeit {
local DISPLAY=$1
echo nobuticanfakeit: $DISPLAY
}
echo main: $DISPLAY
amiasubshell :2
echo main: $DISPLAY
(amiasubshell :5)
echo main: $DISPLAY
nobuticanfakeit :28
echo main: $DISPLAY
첫 번째 인스턴스는 amiasubshell
본문에서 앞으로 이동한 값을 변경합니다. 두 번째 인스턴스는 서브셸이므로 그렇지 않습니다. 의 인스턴스는 변수 nobuticanfakeit
이기 때문에 함수 컨텍스트의 값만 변경합니다 .local
main: :0
amiasubshell: :2
main: :2
amiasubshell: :5
main: :2
nobuticanfakeit: :28
main: :2