我正在整理一些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