요약: 셸 스 크 립 트 매개 변수 전달 에 빈 칸 이 포함 되 어 있 는 문 제 를 해결 합 니 다.

3031 단어 linuxshell
이 문 제 를 해결 하기 전에 세 가지 관련 지식 을 알 아야 한다.
  • $* 는 "스 크 립 트 에 전 달 된 모든 인 자 를 하나의 문자열 로 표시 합 니 다"라 고 표시 합 니 다. 들 어 오 는 매개 변수의 모든 값 을 하나의 값 으로 표시 합 니 다
  • $\# 전달 하 는 매개 변수 갯 수
  • 매개 변수 아래 표 시 는 아래 표 1 에서 시작 합 니 다.

  • 전달 매개 변수 에 빈 칸 이 존재 하 는 상황 은 세 가지 로 나 뉜 다. 첫 번 째 는 함수 에 전달 하 는 매개 변수 에 빈 칸 이 존재 하 는 것 이다.두 번 째 는 셸 스 크 립 트 에 직접 전달 되 는 매개 변수 (전달 되 는 매개 변 수 는 직접 사용 되 고 다른 함수 에 간접 적 으로 전달 되 지 않 음 을 나타 낸다) 에 빈 칸 이 존재 합 니 다.세 번 째 는 셸 스 크 립 트 에 간접 적 으로 전 달 된 매개 변수 에 빈 칸 이 존재 하 는 것 입 니 다 (즉, 전 달 된 매개 변 수 를 다른 함수 에 다시 전달 하 는 것 입 니 다).
    1. 함수 에 전달 하 는 매개 변수 에 빈 칸 이 존재 합 니 다.
    이 방법 으로 해결 하 는 것 이 비교적 쉬 우 니, 직접 작은 따옴표 로 묶 으 면 된다. 강 강 강 은 다음 과 같은 몇 가지 예 를 들 면 알 수 있다.
       :
    #!/bin/bash
    test() {
    	echo      :$1
    	echo      :$2
    	echo      :$3
    }
    test "1 2 3 4 5 6"
    
      :
         :1 2 3 4 5 6
         :
         :
    
    
       :
    #!/bin/bash
    test() {
    	echo      :$1
    	echo      :$2
    	echo      :$3
    }
    test "1 2 3" "4 5 6"
    
      :
         :1 2 3
         :4 5 6
         :
    
       :
    #!/bin/bash
    test() {
    	echo      :$1
    	echo      :$2
    	echo      :$3
    }
    test 1 "2 3 4 5" 6
    
      :
         :1
         :2 3 4 5
         :6
    

    2. 셸 파일 에 직접 전달 하 는 매개 변 수 는 빈 칸 이 있 습 니 다.
    이런 방식 의 처 리 는 첫 번 째 처리 와 마찬가지 로 바로 빈 칸 을 넣 으 면 된다.
    3. 셸 파일 종 에 간접 적 으로 전달 하 는 매개 변수 에 빈 칸 이 존재 합 니 다.
    우 리 는 아래 의 셸 파일 을 봅 니 다.
    test.sh 
    #/!bin/bash
    echo "       :${1}"
    echo "       :${2}"
    echo "       :${3}"
    
    test() {
            echo "       :${1}"
            echo "       :${2}"
            echo "       :${3}"
    
    }
    test $*
    echo     :$*

    명령 실행 사용: sh test. sh "12"3 4 "5 6"
    출력:
           :1 2
           :3 4
           :5 6
           :1
           :2
           :3
        :1 2 3 4 5 6
    

    들 어 오 는 매개 변 수 를 즉시 함수 에 전달 하면 따옴표 가 없어 함수 에서 함 수 를 정확하게 가 져 올 수 없 음 을 알 수 있 습 니 다.
    sh test. sh '1, 2', '3, 4', '5, 6' (매개 변 수 는 가장 바깥쪽 에 작은 따옴표 로 포함) 을 사용 하여 다음 과 같이 출력 합 니 다.
           :"1 2" "3 4" "5 6"
           :
           :
           :"1
           :2"
           :"3
        :"1 2" "3 4" "5 6"

    이상 적 인 가 치 를 얻 지 못 한다.
    마지막 으로 제 가 얻 는 방법 을 시도 해 보 겠 습 니 다.
    #/!bin/bash
    echo "       :${1}"
    echo "       :${2}"
    echo "       :${3}"
    
    test() {
            echo "       :${*:1:2}" #  1       2   
            echo "       :${*:3:2}" #  3       2   
            echo "       :${*:5:2}" #  5       2   
    
    }
    test $*
    echo     :$*
    
      :sh test.sh "1 2" "3 4" "5 6"
      :
           :1 2
           :3 4
           :5 6
           :1 2
           :3 4
           :5 6
        :1 2 3 4 5 6

    ${*: 시작 위치: 매개 변수 개수} (매개 변수 개 수 를 지정 하지 않 으 면 가 져 온 매개 변 수 는 시작 위치 에서 끝 위치 까지) 원 하 는 결 과 를 실현 할 수 있 지만, 존재 하 는 문 제 는 매개 변수 에 있 는 빈 칸 의 개 수 를 명확 하 게 알 아야 합 니 다. sh test. sh "12"3 을 실행 해 야 합 니 다. 45 ""67 "은 코드 만 수정 할 수 있 기 때문에 간접 적 으로 여러 개의 값 을 전달 하 는 것 을 피 할 수 있 습 니 다.그러나 이런 방식 이 존재 한 다 는 것 을 알 수 있다.

    좋은 웹페이지 즐겨찾기