Bash
如果您在另一個 shell 中更改環境變數,它會在其他 shell 中更改還是保持不變?
如果我在 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變數。