我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
in order 取消设置变量的反义词是什么?
预期成绩
echo $linuxmachine01
< no output >
答案1
使用子 shell(推荐)
在子 shell 中运行 source 命令:
(
source linuxmachines_mount_point.txt
cmd1 $linuxmachine02
other_commands_using_variables
etc
)
echo $linuxmachine01 # Will return nothing
子shell 由括号定义:(...)
。当子 shell 结束时,在子 shell 中设置的任何 shell 变量都会被忘记。
使用未设置
这会取消设置以下导出的任何变量linuxmachines_mount_point.txt
:
unset $(awk -F'[ =]+' '/^export/{print $2}' linuxmachines_mount_point.txt)
-F'[ =]+'
告诉 awk 使用空格和等号的任意组合作为字段分隔符。/^export/{print $2}
这告诉 awk 选择以 开头的行
export
,然后打印第二个字段。unset $(...)
这将运行 inside 的命令
$(...)
,捕获其标准输出,并取消设置由其输出命名的任何变量。
答案2
您无法取消source
该脚本。
您可以做的是将所有导出的变量存储在临时文件中,在获取脚本后将其与变量进行比较,然后使用 删除溢出unset
,例如:
export > temp_file
source myscript
#... do some stuff
unset "$(comm -3 <(sort temp_file) <(export | sort) | awk -F'[ =]' '{print $3}' | tr '\n' ' ')"
答案3
您可以使用unset
命令来“忘记”变量。
答案4
最简单的方法是修改脚本,使其还定义一个命令来撤消脚本的效果:
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'