Bash 기술: 소개\\\$0,\\$1,\\$2,\$\#,\$@,\$*,\$?의미

4225 단어 linuxbashshell
Linux bash 셸 스 크 립 트 를 작성 할 때 $0、$1、$2、$#、$@、$*、$? 등 인 자 를 자주 사용 합 니 다.다음은 이 매개 변수의 의 미 를 구체 적 으로 설명 한다.
이러한 명령 을 실행 ./test.sh a b c 한다 고 가정 하면 아래 의 매개 변 수 를 사용 하여 값 을 얻 을 수 있 습 니 다.
  • $0 대응./test. sh 이 값 입 니 다../work/test.sh 을 실행 하면 파일 이름 자체 의 부분 만 되 돌려 주 는 것 이 아니 라./work/test. sh 에 대응 합 니 다.
  • $1 는 a, 즉 $1 스 크 립 트 에 전 달 된 첫 번 째 인 자 를 가 져 옵 니 다.
  • $2 는 b, 즉 $2 스 크 립 트 에 전 달 된 두 번 째 인 자 를 가 져 옵 니 다.
  • $3 는 c, 즉 $3 스 크 립 트 에 전 달 된 세 번 째 인 자 를 가 져 옵 니 다.$4, $5 등 매개 변수의 의 미 는 이에 따라 유추 된다.
  • $# 3 을 얻 을 수 있 습 니 다. 스 크 립 트 에 들 어 오 는 매개 변수 개 수 는 통계 적 인 매개 변 수 는 포함 되 지 않 습 니 다 $0.
  • $@ 는 'a', 'b', 'c', 즉 모든 매개 변수의 목록 을 얻 을 수 있 습 니 다. $0 을 포함 하지 않 습 니 다.
  • $* 도 'a', 'b', 'c' 를 얻 을 수 있 는데 그 값 은 $@ 과 같다.다만 "$*""$@" 는 달 랐 다."$*" 모든 매개 변 수 를 하나의 문자열 로 합 친 다음 "$@" 문자열 매개 변수 배열 을 얻 을 수 있 습 니 다.
  • $? 명령 을 실행 한 후 되 돌아 오 는 값 을 얻 을 수 있 습 니 다.프론트 명령 을 실행 하면 즉시 ./test.sh a b c 으로 이 명령 의 반환 값 을 얻 을 수 있 습 니 다.이 명령 은 시스템 자체 의 명령 일 수도 있 고 셸 스 크 립 트 일 수도 있 으 며 사용자 정의 bash 함수 일 수도 있 습 니 다.

  • 시스템 자체 의 명령 을 실행 할 때 $? 이 명령 의 반환 값 에 대응 합 니 다.셸 스 크 립 트 를 실행 할 때 $? 이 스 크 립 트 호출 $? 명령 을 되 돌려 주 는 값 입 니 다.주동 호출 exit 명령 이 없 으 면 기본적으로 0 으로 되 돌아 갑 니 다.사용자 정의 bash 함 수 를 실행 할 때 exit 이 함수 호출 $? 명령 에 대한 값 을 되 돌려 줍 니 다.주동 호출 return 명령 이 없 으 면 기본적으로 0 으로 되 돌아 갑 니 다.
    다음은 예 를 들 어 return"$*" 의 차 이 를 설명 한다.만약 에 하나의 "$@" 스 크 립 트 가 있다 고 가정 하면 내용 은 다음 과 같다.
    #!/bin/bash
    
    for arg in "$*"; do
        echo "****:" $arg
    done
    echo --------------
    for arg in "$@"; do
        echo "@@@@:" $arg
    done

    이 스 크 립 트 는 각각 testparams.sh"$*" 확 장 된 내용 을 옮 겨 다 니 며 인쇄 합 니 다.
    실행 "$@" 스 크 립 트 결 과 는 다음 과 같 습 니 다.
    $ ./testparams.sh This is a test
    ****: This is a test
    --------------
    @@@@: This
    @@@@: is
    @@@@: a
    @@@@: test
    ./testparams.sh 문자열 만 생 성 되 고 for 순환 은 한 번 만 옮 겨 다 니 는 것 을 볼 수 있 습 니 다."$*" 여러 문자열 이 생 겼 습 니 다. for 순환 이 여러 번 반복 되 고 문자열 매개 변수 배열 입 니 다.
    주의: 들 어 오 는 인자 가 9 개 이상 이면 "$@" 10 번 째 인 자 를 인용 할 수 없고 $10 로 인용 해 야 합 니 다.
    9 보다 큰 숫자 를 대괄호 ${10} 로 묶 어야 한 다 는 것 이다.예 를 들 어 {} 는 10 번 째 매개 변 수 를 가 져 오 는 값 을 표시 하고 ${10} 로 10 번 째 매개 변 수 를 가 져 오지 못 하 는 값 을 가 져 옵 니 다.실제로 $10$10, 즉 ${1}0 의 값 을 먼저 얻 고 그 다음 에 0 을 따라 가 는 것 과 같다.$1 의 값 이 'first' 라면 $1 의 값 은 'first 0' 이다.
    man bash 에서 위치 매개 변수 (positional parameters) 에 대한 설명 은 다음 과 같 습 니 다.
    Positional Parameters
    A positional parameter is a parameter denoted by one or more digits, other than the single digit 0.
    Positional parameters are assigned from the shell's arguments when it is invoked, and may be reassigned using the set builtin command. Positional parameters may not be assigned to with assignment statements. The positional parameters are temporarily replaced when a shell function is executed.
    When a positional parameter consisting of more than a single digit is expanded, it must be enclosed in braces.
    즉, 마지막 문장 에서 언급 한 바 와 같이 위치 파라미터 가 여러 자리 숫자 로 구 성 될 때 대괄호 $10 로 여러 자리 숫자 를 묶 어야 한다.
    위치 매개 변수 개수 가 져 오기
    bash 에 서 는 들 어 오 는 명령 행 이나 들 어 오 는 함수 의 매개 변수 개 수 를 가 져 올 수 있 습 니 다.주의해 야 할 것 은 {} 통 계 된 매개 변수 개 수 는 스 크 립 트 자체 이름 이나 함수 이름 을 포함 하지 않 습 니 다.예 를 들 어 집행 $# 은 3 이 아니 라 2 이다.
    man bash 의 설명 을 보면 다음 과 같 습 니 다.
    Special Parameters
    # Expands to the number of positional parameters in decimal.
    이 를 통 해 알 수 있 듯 이 $# 은 실제 적 으로 위치 매개 변수 (positional parameters) 로 확 장 된 개수 이 고 통 계 된 매개 변 수 는 포함 되 지 않 습 니 다 ./a.sh a b.

    좋은 웹페이지 즐겨찾기