Bash

source命令相反

  • September 24, 2018

我在我的 bash 腳本中使用該source命令來讀取/列印變數值

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 >

使用子外殼(推薦)

在子 shell 中執行 source 命令:

(
source linuxmachines_mount_point.txt
cmd1 $linuxmachine02
other_commands_using_variables
etc
)
echo $linuxmachine01  # Will return nothing

子外殼由括號定義:(...). 當子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 $(...)

這將在內部執行命令$(...),擷取其標準輸出,並取消設置由其輸出命名的任何變數。

引用自:https://unix.stackexchange.com/questions/413844