2012-05-13 3 views
46

例を渡す:バッシュ:最初のコマンドライン引数を取り、残り

check_prog hostname.com /bin/check_awesome -c 10 -w 13

check_remote -H $HOSTNAME -C "$ARGS" 
#To be expanded as 
check_remote -H hostname.com -C "/bin/check_awesome -c 10 -w 13" 

私は上記の理にかなって、私はおよそためにこれを使用すると、引数が変更されます願ってい20+コマンド。プログラムをラップする奇妙な方法ですが、これを回避するここで使用しているいくつかのシステムでいくつかの問題があります(70年代のコードが好きです)

上記はPerlまたはPythonで書かれていますが、Bashはあなたはshift

シフトを使用することができ、好ましい方法

答えて

59

は位置パラメータで動作するシェルの組み込みであること。シフトを呼び出すたびに、すべての位置パラメータを1つ下に「シフト」します。 $ 2は$ 1、$ 3は$ 2、$ 4は$ 3などとなります。

+7

恐ろしいです! 'echo $ 1 shift echo $ * 'は、これを探している人たちのためにshiftを使う方法の例です。 './script.sh cmd1 cmd2 cmd3 cmd4'のように実行すると$ 1に設定されますcmd1 cmd2 cmd3 cmd4私が望むように – user554005

+2

そして、 '$#'はすでに0になっていない限り、1だけ減らされます。また、 'shift'に複数の場所でシフトする数値引数を与えることもできます。 –

+7

@ user554005:引用符で囲まれていない形式と '$ *'形式の引数が引数を "平坦化"するので、 'echo $ *'や 'echo" $ * "'の代わりに 'echo" $ @ "'通常は欲しくない。 –

関連する問題