2017-09-01 4 views

答えて

1

一つの方法は、bash array slice notationを使用することです:

foo() { 
    echo "[$1]" 
    echo "[$2]" 
    echo "[${@:3}]" 
} 

が生成されますあなたのようにあなたのコードで実装し

$ foo a b c d ef 
[a] 
[b] 
[c d ef] 

:あなたが必要な場合は

if [ "$2" == "exec" ]; then 
    other_script execute "${@:3}" 
fi 

は、第三に言うと、第4引数では、スライスに長さを適用できます。

other_script execute "${@:3:2}" # :2 is a length specification 

別の方法として、あなたはもはや引数$1または$2を必要としなかった場合は、だけの方法からそれらをシフトすることである。

foo=${1:?Missing argument one} 
bar=${2:-Default} 
shift 2 

echo "[email protected]" # the first two args are gone, so this is now args #3 on 

私はのカップルのために、正直に、この方法を好みます理由:

  1. 番号付きのargsは覚えがたいです:名前付きargsがより明確です。
  2. アレイスライスの表記法は私の経験に基づいてよく知られていないため、今後のメンテナンスで混乱を招く可能性があります。
+1

この素晴らしい答えの詳細が本当に好きです。 – Martlark

関連する問題