我一直在使用參數總是開發了我的shell腳本,一個日常的基礎上,甚至開發一些自動化腳本時。但是,最近我嘗試了一種不同的方法,將環境變量導出到腳本中。我應該使用參數還是導出環境變量?
#!/bin/bash
: ${USER?"Requires USER"}
: ${FIRST_NAME?"Requires FIRST_NAME"}
: ${LAST_NAME?"Requires LAST_NAME"}
: ${EMAIL?"Requires EMAIL"}
set -x
setup_git_account(){
su - "${USER}" -c "git config --global user.name '${FIRST_NAME} ${LAST_NAME}'"
su - "${USER}" -c "git config --global user.email '${EMAIL}'"
}
setup_git_account
這將確保一個更小的代碼,很容易檢查是否所有必需的變量初始化並且也更好地瞭解腳本是幹什麼的,一旦所有的變量都在外部聲明。
export USER='john' && export FIRST_NAME='John' && export LAST_NAME='Doe' && export EMAIL='[email protected]' && setup_git_account.sh
這可能是這樣表示,如果與接收的參數來實現:
setup_git_account.sh --user 'john' --firstname 'John' --lastname 'Doe' --email '[email protected]'
然而,最後一個,需要的編碼方式多行來實現getopts
開關的情況下,檢查傳遞的參數值等
不管怎樣,我知道我們已經習慣了第二種方法,但我認爲第一種方法也有幾個好處。如果在所提出的方法之間有任何不利之處,我想從你那裏聽到更多的消息。我應該使用哪一個?
謝謝!
有了環境變量,如果不是所有的變量總是顯式設置,那麼顯然會出現意外行爲。他們可以通過系統設置(偶然),你的bashrc,你之前運行的腳本等。 – hasufell
我建議使用參數 – hek2mgl
使用小寫變量名稱。特別是'USER'已經在使用中,並且*將會被設置在您的環境中。 – chepner