Bash

從函式內部導出變數等於全域導出該變數?

  • April 28, 2022

我使用帶有本機 Bash 的 Ubuntu 16.04。

我不確定是否執行

#!/bin/bash
myFunc() {
   export myVar="myVal"
}
myFunc

在任何意義上都等於執行export myVar="myVal".

當然,全域變數通常應該在函式之外聲明(我假設這是一個約定問題,即使在技術上是可能的)但我確實想知道更奇特的情況,即編寫一些非常通用的函式並希望在其中的變數仍然可以在任何地方使用。

函式export內部的變數是否等同於直接在 CLI 中全域導出它,使其可用於 shell 中的所有內容(所有子 shell 以及其中的函式)?

您的腳本在腳本的環境中創建了一個環境變數myVar。目前呈現的腳本在功能上完全等同於

#!/bin/bash

export myVar="myVal"

函式體中發生的事實export與環境變數的範圍無關(在這種情況下)。一旦呼叫該函式,它將開始存在。

該變數將在腳本環境和函式呼叫後從腳本啟動的任何其他程序的環境中可用。

該變數不會存在於父程序的環境(您從中執行腳本的互動式 shell)中,除非腳本是來源(使用.or source),在這種情況下,整個腳本將在互動式 shell 的環境中執行(即“採購”外殼文件的目的)。

沒有函式呼叫本身:

myFunc() {
   export myVar="myVal"
}

獲取文件將放置myFunc在呼叫 shell 的環境中。然後呼叫該函式將創建環境變數。

另請參閱問題shell 變數可以具有哪些範圍?

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