source
변수 값을 읽거나 인쇄하기 위해 bash 스크립트에서 명령을 사용 합니다.
more linuxmachines_mount_point.txt
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
source linuxmachines_mount_point.txt
echo $linuxmachine01
sdb sdc sdf sdd sde sdg
source
변수를 설정 해제하기 위해 반대는 무엇입니까 ?
예상 결과
echo $linuxmachine01
< no output >
답변
서브 쉘 사용 (권장)
서브 쉘에서 소스 명령을 실행하십시오.
(
source linuxmachines_mount_point.txt
cmd1 $linuxmachine02
other_commands_using_variables
etc
)
echo $linuxmachine01 # Will return nothing
서브 쉘은 parens에 의해 정의됩니다 (...)
. 서브 쉘이 종료되면 서브 쉘 내에 설정된 모든 쉘 변수가 잊혀집니다.
설정되지 않은 사용
다음으로 내 보낸 변수를 설정 해제합니다 linuxmachines_mount_point.txt
.
unset $(awk -F'[ =]+' '/^export/{print $2}' linuxmachines_mount_point.txt)
-
-F'[ =]+'
awk에게 공백과 등호의 조합을 필드 구분 기호로 사용하도록 지시합니다. -
/^export/{print $2}
이것은 awk에게 시작하는 줄을 선택한
export
다음 두 번째 필드를 인쇄하도록 지시 합니다. -
unset $(...)
이 명령은 inside 명령을 실행
$(...)
하고 stdout을 캡처 한 후 출력에 의해 명명 된 변수를 설정 해제합니다.
답변
source
스크립트를 해제 할 수 없습니다 .
할 수있는 일은 내 보낸 모든 변수를 임시 파일에 저장하고 스크립트를 소싱 한 후 변수와 비교 한 다음 다음과 같이 오버플로를 제거하는 것입니다 unset
.
export > temp_file
source myscript
#... do some stuff
unset "$(comm -3 <(sort temp_file) <(export | sort) | awk -F'[ =]' '{print $3}' | tr '\n' ' ')"
답변
unset
명령을 사용 하여 변수를 “잊어 버릴”수 있습니다.
답변
원하는 결과를 얻는 가장 간단한 해결책은 변수를 비어있는 것으로 다시 선언하는 것입니다.
$ export linuxmachine01="sdb sdc sdf sdd sde sdg"
$ echo "$linuxmachine01"
sdb sdc sdf sdd sde sdg
$ linuxmachine01=""
$ echo "$linuxmachine01"
$
물론 변수는 여전히 정의되어 있고 내보내지고 비어 있지만 정의됩니다.
$ declare -p linuxmachine01
declare -x linuxmachine01=""
환경과 실행중인 쉘에서 변수를 올바르게 제거하려면 unset (권장 방법)을 사용해야합니다.
$ unset linuxmachine01
$ declare -p linuxmachine01
bash: declare: linuxmachine01: not found
$ echo "$linuxmachine01"
$
답변
가장 간단한 방법은 스크립트를 수정하여 스크립트의 효과를 취소하는 명령을 정의하는 것입니다.
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
alias linuxmachines_mount_point='for v in linuxmachine01 linuxmachine02 linuxmachine03 linuxmachine04; do unset $v; done; unalias linuxmachines_mount_point'
답변
linuxmachines_mount_point.txt를 다음과 같이 작성할 수 있습니다
test "$linuxmachine01" && unset -v linuxmachine01 || linuxmachine01="sdb sdc sdf sdd sde sdg"
변수가 필요할 때
source linuxmachines_mount_point.txt
변수를 제거하고 싶을 때
source linuxmachines_mount_point.txt
답변
source
명령을 사용하여 를 활성화하는 경우 명령을 VirtualEnvironment
사용하여 종료 할 수 있습니다 deactivate
.