我正在編寫一個shell腳本,我必須檢查是否設置了環境變量,如果沒有設置,那麼我必須設置它。有沒有辦法檢查shell腳本,是否已經設置了環境變量?檢查環境變量是否已經設置
回答
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
我想強調的是[ -z $VARIABLE ]
是不夠的,因爲你可以有VARIABLE
但它不是出口。這意味着它根本不是一個環境變量。
這個工作在所有的shell環境中嗎? – Mojoy 2012-07-27 11:00:39
@ Senthilnathan:是的,當然,唯一可以重寫的代碼就是'grep -q'。人們可以編寫'env |而不是使用grep^VARIABLE =>/dev/null。 – 2012-07-27 11:02:20
如果我導出一個變量,然後將該變量設置爲別的東西而不導出它,最終我的非導出變量和我的導出變量之間是否不匹配,還是會自動更新導出的變量? – ArtOfWarfare 2015-09-11 11:29:00
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
這會檢查$ VARIABLE的長度是否爲零。
你想要做的是在bash本地,它被稱爲參數替換:
VARIABLE="${VARIABLE:=abc}"
如果沒有設置變量,右邊將等於ABC。請注意,內部操作符:=可能替換爲: - 測試VARIABLE是否未設置或爲空。
正是我在找的東西。如果TEST_DATABASE_NAME尚未定義,那麼'export TEST_DATABASE_NAME =「$ {TEST_DATABASE_NAME:= prodlike}」行只會將prodlike用作默認值。沒有凌亂的條件塊。全部在一行代碼中。 – 2017-04-15 05:41:46
的標準溶液,以有條件地分配可變(無論是在環境或不)是:
: ${VAR=foo}
,將設置VAR爲值「foo」的僅當它是未設置。
要設置VAR爲「富」如果VAR沒有設置或者爲空字符串,使用:
: ${VAR:=foo}
爲了把VAR的環境中,跟進:
export VAR
你也可以做export VAR=${VAR-foo}
或export VAR=${VAR:=foo}
,但一些較舊的shell不支持在同一行中分配和導出的語法。另外,DRY;使用=
運營商兩側的名稱是不必要的重複。 (導出變量的第二行違反了同一個主體,但感覺更好。)
請注意,確定變量是否在環境中通常非常困難。解析env
的輸出將不起作用。試想一下:
export foo='
VAR=var-value'
env | grep VAR
它也沒有工作產卵子shell和測試:
sh -c 'echo $VAR'
將表明VAR被設置在子shell,這將是一個指標,VAR是環境當前進程,但可能只是在子shell的初始化中設置了VAR。然而,在功能上,結果與VAR在環境中相同。幸運的是,您通常不關心VAR是否在環境中。如果你需要它,把它放在那裏。如果你需要它,拿出來。
您可以添加一個關於':$ {VAR:= foo}'符號如何在內部工作的解釋嗎?我總是覺得它是解決方案,但從來沒有如何實際工作。 – 2014-01-13 18:03:59
我在[StackOverflow](http://stackoverflow.com/questions/4437573/bash-assign-default-value)上找到了一些解釋! – 2014-01-13 18:09:33
- 1. 檢查Ant腳本中是否設置了環境變量
- 2. 檢查環境變量是否存在並設置爲True
- 3. Powershell檢查什麼環境變量已經改變
- 4. 檢查一個變量是否已設置,值是ksh
- 5. 檢查環境變量
- 6. 檢查變量是否設置
- 7. 檢查變量是否設置爲NO_VALUE
- 8. 設置環境變量
- 9. 設置Maven環境變量
- 10. 設置環境變量
- 11. 設置環境變量
- 12. Elasticsearch設置環境變量
- 13. C#設置環境變量
- 14. htaccess設置環境變量
- 15. 設置apache環境變量
- 16. DrJava設置環境變量
- 17. 如何檢查會話變量是否已設置?
- 18. 在Activiti中,如何檢查變量是否已設置?
- 19. VBA如何檢查變量是否已設置?
- 20. 燒瓶/ gunicorn:從環境變量設置環境變量
- 21. 如何檢查變量是否已經聲明(T-SQL)?
- 22. Javascript - 可以檢查一個間隔是否已經設置?
- 23. 檢查一個變量是否已經設置了另一個變量的值的名稱
- 24. 是否可以在travis中設置條件環境變量?
- 25. 是否可以爲一次測試設置環境變量?
- 26. 是否可以永久設置環境變量?
- 27. 是否可以在.sublime-project文件中設置環境變量?
- 28. 如何檢查LogWriter是否已設置?
- 29. 如何檢查WaitHandle是否已設置?
- 30. 檢查JSP片段是否已設置
實際上,這不是這個問題的真正重複:這裏的OP想知道是否設置了一個變量,並且如果不是這樣做,而不是退出腳本。 $ {V:?}在這種情況下不是有效的答案。 'set | grep -q'^ V =''是。這測試了變量的存在並且即使設置了變量但對空字符串也起作用。 – Coroos 2015-11-14 20:24:53