使用一个环境变量累积bash参数并对其进行解析

使用一个环境变量累积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

我有一个从用户输入接收参数的脚本,但也可以有来自环境变量的参数

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 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} "$@"