查看bug in git,目前git-submodule.sh读取(重新排序):
[iterating over command line arguments]
--reference)
case "$2" in '') usage ;; esac
reference="--reference=$2"
shift
;;
--reference=*)
reference="$1"
shift
;;
[...]
if test -n "$reference"
then
git-clone $quiet "$reference" -n "$url" "$path" --separate-git-dir "$gitdir"
else
git-clone $quiet -n "$url" "$path" --separate-git-dir "$gitdir"
fi ||
die "$(eval_gettext "Clone of '\$url' into submodule path '\$path' failed")"
这仅使用--reference
给出的 last 参数。我现在想要增强此功能,以便将所有--reference
选项传递给git-clone
。这对于微不足道的论证(reference="$reference --reference=$2"
)来说是微不足道的,但在考虑包含空格,引号或shell元字符的参数时,我的思绪很难理解。
逃避这些累积论点的最佳做法是什么?
答案 0 :(得分:2)
最佳做法是使用bash数组:
declare -a references
#...
--reference)
case ... esac
references+=("--reference=$2")
shift
;;
--reference=*)
references+=("$1")
shift
;;
#...
# no need to test the array for emptiness
git-clone $quiet "${references[@]}" -n "$url" "$path" --separate-git-dir "$gitdir"
但是,引用的脚本改为使用/ bin / sh。