我正在整理一些bash
的代码。我有一堆行,像下面的例子那样设置变量,除非已经设置了,使用给脚本的命令行参数。bash函数可以访问和操作脚本的命令行参数吗?
[[ -z "${myvar1}" && -n $1 ]] && myvar1="$1" && shift
[[ -z "${myvar2}" && -n $1 ]] && myvar2="$1" && shift
...repeated many times...
我想我会写一个函数来做到这一点,这样称呼它
positional_arg myvar1
positional_arg myvar2
然而,这需要的功能来访问和操作的参数列表。我不知道这是可能的,所以这是我想出了...
args=("[email protected]")
positional_arg() {
local value=$args
[[ -z "${!1}" && -n "$value" ]] && eval "$1='$value'" && args=(${args[@]:1})
}
,我知道这样做的问题是,
- 这取决于全球
args
阵列使用前设置 - 构造
args=(${args[@]:1})
其中转变该数组不适用于空白,所以这将不适用于包含空白的参数。
所以,我想发现一个函数是否可以访问和操作其脚本的位置参数。
另外,在bash中实现这种功能的任何替代建议都会受到欢迎,特别是如果它们克服了上述问题!
(GNU bash, version 4.3.18(1)-release)
感谢您的空白修复!你可以在你的例子中解释'set - “$ {args [@]}”'“吗? – starfry 2014-09-26 14:44:57
@starfry,它从'args'数组中设置参数列表('$ 1','$ 2'等)。 – 2014-09-26 14:59:59
@chepner:我最初有'$ {myvar1:= $ 1} ...'但改变了它,因为位置参数分配是在用'getopts'解析选项来填充仍然未分配的变量之后出现的。因此,变量到参数的映射根据选项的使用情况而变化。但是,是的,在一致的情况下,我正是这样做的。 – starfry 2014-09-27 10:36:58