我有一个脚本从用户输入接收参数,但也可以有来自环境变量的参数。
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似乎不是一个选项。
非常感谢任何帮助!
提前致谢。
答案 0 :(得分:0)
替换
$*="${ADZ_DEPLOY_OPT} $*"
使用:
set -- ${ADZ_DEPLOY_OPT} "$@"
注意:
由于设计了bash,因此无法直接分配给$*
。分配是使用set
内置的。
您想使用"$@"
而不是$*
。表单$*
会受到分词,而"$@"
的扩展则不会。
根据ADZ_DEPLOY_OPT
的示例值,您需要进行单词拆分。如果你试图在ADZ_DEPLOY_OPT
中放入复杂的参数,这将不起作用:你将需要使用数组。