2012-03-07 52 views
0

以期一个bug in git,此刻git-submodule.sh读取(重新排序):在shell脚本中退出累加参数?

[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给出的最后说法。我现在想要加强这一点,以便所有的--reference选项都被传递到git-clone。这对于微不足道的参数来说是微不足道的(reference="$reference --reference=$2"),但是当考虑包含空格,引号或shell元字符的参数时,我的想法会变得很难理解。

逃避这种累积论点的最佳做法是什么?

回答

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的替代。

+0

谢谢。无论如何,我一直在寻找一种通用的解决方案,除了git case的特性之外。 – 2012-03-07 19:16:40