我應該如何在 bash 中導出 shell 變數?

我應該如何在 bash 中導出 shell 變數?

我通常在 Linux 中使用 bash,如果我需要導出變量,我可能會寫:

export LC_ALL=C

然而,這些天我做了更多的 Solaris 工作,與我一起工作的 Solaris 管理員總是會寫:

LC_ALL=C ; export LC_ALL

有理由選擇後者而不是前者嗎?

我猜前者可能無法被某些 shell 辨識。哪個?

謝謝。

答案1

我相信真正的 Bourne shell(許多商業 Unix 變體上的 /bin/sh)不支援在單一語句中進行賦值和導出。這是我在 Solaris 上的記憶。

我不知道新的Solaris版本現在是否預設使用bash。無論如何,你的後一種情況更便攜,所以我會堅持使用。

答案2

在 Solaris 中,/bin/sh 需要這兩個語句,而 /bin/bash 只需要一條語句即可。在 Linux 上,/bin/sh 通常是 /bin/bash 的符號鏈接,因此沒有區別。

如果您正在編寫一個可能源自另一個腳本的腳本,那麼請始終使用兩個語句格式。如果腳本沒有或不會被獲取,只需檢查腳本頂部的 shebang 行以查看您使用的 shell。許多 Solaris 腳本使用 /bin/sh,這是許多軟體包的預設設定。因此,大多數管理員更喜歡採用更便攜的方式匯出變數。

答案3

如果您主要使用bash,則可以使用前者,因為自從Solaris 10 以來,您可以使用bash 作為root shell,而不會產生任何危險的副作用。會自動回退到伯恩殼牌。

答案4

我正在開發大約 1998 年的 Solaris 2.6。使用 sh,我發現您需要您提到的兩行版本才能看到 env 的正確結果。使用來自 sunfreeware.org 的 bash,並且它可以在單行版本中正常工作。

相關內容