Bash

如果您在另一個 shell 中更改環境變數,它會在其他 shell 中更改還是保持不變?

  • September 8, 2017

如果我在 bash 中創建一個環境變數,例如 SPORT=baseball,則切換到 tcsh 並將其更改為“正在執行”。如果我改回 bash,SPORT 會顯示為“正在執行”嗎?(我會自己嘗試,但我只有 bash)

這是一個實際實驗,完全符合您的要求;它執行bash,設置環境變數,然後啟動tcsh並更改其值。然後它檢查bash.

#!/bin/bash

export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"

tcsh -c 'echo $SPORT; setenv SPORT archery; echo $SPORT'

printf 'SPORT is "%s"\n' "$SPORT"

執行此bash腳本,呼叫tcsh將導致

SPORT is "baseball"
baseball
archery
SPORT is "baseball"

但是我們甚至不必切換到查看它的實際效果,在我們的腳本tcsh中引入一個具有單獨環境的子shell就足夠了:(...)``bash

#!/bin/bash

export SPORT=baseball
printf 'SPORT is "%s"\n' "$SPORT"

(
   echo "$SPORT"
   export SPORT=archery
   echo "$SPORT"
)

printf 'SPORT is "%s"\n' "$SPORT"

輸出將保持不變。

一個環境不可能影響另一個環境,​​但有一個例外:新環境從父環境繼承環境變數。子shell(如上一個範例)也繼承未導出的shell變數。

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