첫 번째 인수가 파일 이름을 위해 예약 된 간단한 스크립트가 있으며 다른 모든 선택적 인수는 스크립트의 다른 부분으로 전달되어야합니다.
Google을 사용 하여이 위키를 찾았 지만 문자 그대로의 예를 제공했습니다.
echo "${@: -1}"
나는 다음과 같이 다른 일을 할 수 없다.
echo "${@:2}"
또는
echo "${@:2,1}"
터미널에서 “잘못된 대체”를 얻습니다.
문제는 무엇이며 첫 번째 인수를 제외한 모든 인수를 bash 스크립트에 어떻게 처리합니까?
답변
이것을 사용하십시오 :
echo "${@:2}"
다음 구문 :
echo "${*:2}"
로하기 때문에, 잘 작동하지만,하지 않는 것이 좋습니다 @Gordon는 이미 설명, 사용하는 것을 *
, 그것은, 공백 하나의 인수로 함께 모든 인수를 실행하는 동안 @
보존 그들 사이의 휴식 시간 (심지어 자신에 공백이 포함 된 인수의 몇 가지 경우 ). 와의 차이점은 echo
없지만 많은 다른 명령에 중요합니다.
답변
/bin/sh
시도해 볼만한 솔루션을 원한다면
first_arg="$1"
shift
echo First argument: "$first_arg"
echo Remaining arguments: "$@"
shift [n]
위치 매개 변수를 n 번 이동합니다 . shift
세트의 값 $1
의 값을 $2
, 값 $2
의 값과 $3
의 값을 감소시키는 등, 그리고, $#
하나.
답변
http://wiki.bash-hackers.org/scripting/posparams
그것은 사용 설명 shift
후 (첫 번째 N 매개 변수를 폐기 할 경우) 및 대량 사용을 구현을
답변
다른 것을 찾고 이걸 발견했습니다. 게시물은 상당히 오래되었지만 bash에서 가장 쉬운 솔루션은 아래에 설명되어 있습니다 (적어도 bash 4). set -- "${@:#}"
여기서 #은 앞으로 유지하려는 배열 요소의 시작 번호입니다.
#!/bin/bash
someVar="${1}"
someOtherVar="${2}"
set -- "${@:3}"
input=${@}
[[ "${input[*],,}" == *"someword"* ]] && someNewVar="trigger"
echo -e "${someVar}\n${someOtherVar}\n${someNewVar}\n\n${@}"
기본적으로 set -- "${@:3}"
펄의 교대 와 같이 배열의 처음 두 요소를 터 뜨리고 세 번째 요소를 포함한 나머지 모든 요소를 보존합니다. 마지막 요소도 튀어 나올 수있는 방법이 있다고 생각합니다.