【Bash 基本語法 #5】小知識 | source 與 bash 執行 script 的差別

前言

這篇是小知識篇,
我們在執行一個 bash 腳本的時候,可能會有幾種執行方法,
但其實有很大的差別,
以下我們進行比較。

比較

我們要比較的執行方式有

  • ./script.sh
  • bash ./script.sh
  • source ./script.sh

./script.sh

直接執行腳本,使用的 shell 可以透過 “which $SHELL” 查詢

例如我在 mac 上,查詢的結果會是 /bin/zsh
因此這行 「./script.sh」,實際上等價於 「zsh ./script.sh」

bash ./script.sh

直接指定用 bash 執行 script.sh,
這裡有一個重點「我們在執行這指令後,其實是另外開一個 shell 去執行這個指令

  • 簡單來說,這會有什麼差別呢?

如果我們在此 script 有定義一些環境變數,
他會被執行在「暫時為了執行 script 而產生的 shell」,
所有執行過程中產生的「變數定義不會被保存」。

如果我們要做一些事情,同時「不希望暫時產生的變數不會修改到原本的 shell」,
應該要使用 bash 或 直接執行。

source ./script.sh

與 bash 的最大差別是在,
我們是「對當前的 shell」去執行腳本,
因此「變數定義都會被保存」。

因此如果我們要做一些「環境變數的定義」,
應該要使用 source。

Reference