我每天都使用参数来开发 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='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="94fefbfcfabaf0fbf1d4f1f9f5fdf8baf7fbf9" rel="noreferrer noopener nofollow">[email protected]</a>' && setup_git_account.sh
如果使用接收参数实现,可以这样表示:
setup_git_account.sh --user 'john' --firstname 'John' --lastname 'Doe' --email '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="93f9fcfbfdbdf7fcf6d3f6fef2faffbdf0fcfe" rel="noreferrer noopener nofollow">[email protected]</a>'
但是,最后一个需要更多行代码来实现 getopts
开关情况、检查传递的参数值等。
无论如何,我知道我们已经习惯了第二种方法,但我认为第一种方法也有几个好处。如果所提出的方法之间存在任何缺点,我希望听到您的更多信息。我应该使用哪一个?
谢谢!
最佳答案
有点题外话,bash
的环境变量调用语法可以更短,不需要导出
:
USER='john' FIRST_NAME='John' LAST_NAME='Doe' EMAIL='<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9bf1f4f3f5b5fff4fedbfef6faf2f7b5f8f4f6" rel="noreferrer noopener nofollow">[email protected]</a>' setup_git_account.sh
关于linux - 我应该使用参数还是导出环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41441581/