linux - 我应该使用参数还是导出环境变量?

标签 linux bash shell

我每天都使用参数来开发 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/

相关文章:

bash - 使用重定向创建输出日志

shell - Unix - 如何将下一行追加到文件中的上一行

python - 如果安装了 coreutils 8.24 或更高版本,我如何在 Python 中查找?

linux - 无法使用动态 udp/tcp 端口阻止 ubuntu 20.x 中的应用程序

bash - 崇高的构建代码

perl - 使用 bash/tail/perl/alias 轻松突出显示不同的字符串

bash - 编写 bash 脚本以在 UNIX 中运行 matlab 程序?

.net - 更新到 2.10.1 后 webApp 不起作用

python - 使用 python 或 bash 获取电源(电压/瓦特)

java - 从 Java Runtime exec() 重定向到/bin/bash