programing

첫 번째 인수를 제외한 모든 인수를 처리합니다(bash 스크립트에서).

mbctv 2023. 4. 16. 15:36
반응형

첫 번째 인수를 제외한 모든 인수를 처리합니다(bash 스크립트에서).

첫 번째 인수는 파일명으로 예약되어 있고 다른 모든 옵션인수는 스크립트의 다른 부분으로 전달됩니다.

Google을 사용하여 Wiki를 찾았는데 문자 그대로의 예를 제시했습니다.

echo "${@: -1}"

다른 작업을 할 수 없습니다. 예를 들어 다음과 같습니다.

echo "${@:2,1}"

터미널에서 "Bad substitution"이 수신됩니다.

bash 스크립트에 전달된 첫 번째 인수를 제외한 모든 인수를 처리하려면 어떻게 해야 합니까?

사용방법:

echo "${@:2}"

다음 구문:

echo "${*:2}"

@Gordon이 이미 설명했듯이 를 사용하는 것은 권장되지 않습니다.*, 모든 인수를 공백이 있는 단일 인수로서 함께 실행합니다.@는 인수 자체에 공백이 포함되어 있는 경우에도 이들 사이의 인터럽트를 유지합니다.와의 차이는 없다.echo다른 많은 명령어에서는 문제가 됩니다.

에서 동작하는 솔루션을 필요로 하는 경우/bin/sh해라

first_arg="$1"
shift
echo First argument: "$first_arg"
echo Remaining arguments: "$@"

shift [n]위치 파라미터를 n회 이동합니다.ashift값을 설정합니다.$1값어치에 맞게$2, 의 가치$2값어치에 맞게$3, 등, 의 값을 삭감합니다.$#한 명씩.

bash 4 이상 버전에서 작업:

#!/bin/bash
echo "$0";         #"bash"
bash --version;    #"GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)"

기능 중:

echo $@;              #"p1" "p2" "p3" "p4" "p5"
echo ${@: 0};  #"bash" "p1" "p2" "p3" "p4" "p5"
echo ${@: 1};         #"p1" "p2" "p3" "p4" "p5"
echo ${@: 2};              #"p2" "p3" "p4" "p5"
echo ${@: 2:1};            #"p2"
echo ${@: 2:2};            #"p2" "p3"
echo ${@: -2};                       #"p4" "p5"
echo ${@: -2:1};                     #"p4"

':'와 '-' 사이의 공백에 주의해 주십시오.그렇지 않으면 다음과 같은 의미가 다릅니다.

${var:-word} var가 null이거나 설정되지 않은 경우
단어는 var로 대체됩니다.var 값은 변경되지 않습니다.

${var:+word} var가 설정되어 있는 경우
단어는 var로 대체됩니다.var 값은 변경되지 않습니다.

이에 대한 설명은 다음과 같습니다.Unix / Linux - 셸 치환

http://wiki.bash-hackers.org/scripting/posparams

의 사용법에 대해 설명합니다.shift(첫 번째 N개의 파라미터를 폐기하는 경우) 다음으로 Mass Usage를 구현합니다.

다른 걸 찾다가 이걸 발견했어투고는 꽤 오래된 것처럼 보이지만, 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}"perl's shift와 같이 어레이의 첫 번째 두 가지 요소를 제거하고 세 번째 요소를 포함한 나머지 모든 요소를 유지합니다.마지막 요소도 제거할 수 있을 것 같아요

언급URL : https://stackoverflow.com/questions/9057387/process-all-arguments-except-the-first-one-in-a-bash-script

반응형