[bash] Bash : 첫 번째 명령 줄 인수를 사용하고 나머지는 전달합니다.

예:

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는 위치 매개 변수에서 작동하는 쉘 내장입니다. shift를 호출 할 때마다 모든 위치 매개 변수를 하나씩 “이동”합니다. $ 2는 $ 1이되고, $ 3은 $ 2가되고, $ 4는 $ 3이됩니다.

예:

$ function foo() { echo $@; shift; echo $@; }
$ foo 1 2 3
1 2 3
2 3


답변

프로그래머로서 저는 shift상태를 수정하는 작업이 스크립트의 많은 부분에 영향을 미치고 이해, 수정 및 디버그를 더 어렵게 만들 수 있기 때문에 반대 할 것을 강력히 권장합니다 . 대신 다음을 사용할 수 있습니다.

#!/usr/bin/env bash

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

echo "${rest_args[@]}"


답변