96

例:

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が推奨される方法です。

4

3 に答える 3

126

あなたはシフトを使うことができます

shiftは、位置パラメータを操作するシェルビルトインです。shiftを呼び出すたびに、すべての位置パラメータが1つ下に「シフト」されます。$2は$1になり、$3は$2になり、$4は$3になります。

例:

$ function foo() { echo $@; shift; echo $@; } 
$ foo 1 2 3
1 2 3
2 3
于 2012-05-13T04:05:49.350 に答える
30

プログラマーとして、shift状態を変更する操作はスクリプトの大部分に影響を及ぼし、理解、変更、およびデバッグを困難にする可能性があるため、強くお勧めします:sweat_smile:。代わりに、次を使用できます。

#!/usr/bin/env bash

all_args=("$@")
first_arg=$1
second_args=$2
rest_args=("${all_args[@]:2}")

echo "${rest_args[@]}"
于 2019-12-01T15:09:10.527 に答える
9

アブドラの答えを少し適応させる:

your_command "$1" "${@:2}"

Bash(v3.2およびv5.1)およびZsh(v5.8)でテスト済み

于 2021-07-05T12:08:56.070 に答える