使用一个环境变量累积bash参数并对其进行解析
我有一个从用户输入接收参数的脚本,但也可以有来自环境变量的参数 e、 g: export ADZ_DEPLOY_OPT=“--from git--rootDir XXXXXXX” 在我的脚本中,我尝试做如下操作:使用一个环境变量累积bash参数并对其进行解析,bash,environment-variables,parameter-passing,Bash,Environment Variables,Parameter Passing,我有一个从用户输入接收参数的脚本,但也可以有来自环境变量的参数 e、 g: export ADZ_DEPLOY_OPT=“--from git--rootDir XXXXXXX” 在我的脚本中,我尝试做如下操作: $*="${ADZ_DEPLOY_OPT} $*" while [[ $# -gt 1 ]] do key="$1" case $key in --rootDir) ADZ_ROOT_DIR="$2" shift # past ar
$*="${ADZ_DEPLOY_OPT} $*"
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
--rootDir)
ADZ_ROOT_DIR="$2"
shift # past argument
;;
--tagVersion)
ADZ_TAG_VERSION="$2"
shift # past argument
;;
--from-git)
ADZ_DEPLOY_FROM_GIT=1
;;
*)
# unknown option
;;
esac
shift # past argument or value
done
除了它不起作用,因为当我尝试更新$*以使用其他值扩展它时,它会生成一个错误-我无法成功找到实现此行为的方法
这个想法还在于env变量将充当“默认值”,但可能会被用户在命令行上显式提供的内容覆盖。这就是我的示例,如果用户指定另一个rootDir,我希望将用户rootDir考虑在内
最后,我希望保留长参数名(我喜欢显式),因此使用getopts似乎不是一个选项
任何帮助都将不胜感激
提前感谢。更换
$*="${ADZ_DEPLOY_OPT} $*"
与:
注:
- 由于bash是设计的,因此不能直接分配给
。作业是通过$*
内置完成的集合
- 您想使用
而不是“$@”
。表单$*
将进行分词,而$*
的扩展不会进行“$@”
- 从
的示例值中,确实需要对其进行分词。如果您试图在ADZ_DEPLOY_OPT
中放入复杂的参数,这是行不通的:您将需要使用数组ADZ_DEPLOY_OPT
set -- ${ADZ_DEPLOY_OPT} "$@"