[현학 현 망 & Shell 기초] - 21. 변수의 테스트 와 내용 교체

4444 단어
1. 변수의 테스트 와 내용 교체 가 무엇 입 니까?
우리 가 전에 말 했 듯 이 셸 에서 하나의 변 수 는 정의 되 지 않 았 고 하나의 변수 가 빈 값 인 출력 효과 와 같 습 니 다.
#              y
[root@Lyl ~]# echo $y

#      y   ,     y
[root@Lyl ~]# y=""
[root@Lyl ~]# echo $y

[root@Lyl ~]# 

그 결 과 는 아무런 표시 도 없 었 다.
앞에서 set 명령 을 말 할 때 set -u 명령 을 실행 한 후에 변수 가 존재 하지 않 으 면 잘못 보고 할 수 있다 고 말 했다.변수 가 비어 있 으 면 비어 있 습 니 다.
#              x,     。
[root@Lyl ~]# echo $x
-bash: x: unbound variable

#        y,       。
[root@Lyl ~]# y=""
[root@Lyl ~]# echo $y

[root@Lyl ~]# 

그래서 set -u 를 통 해 셸 의 한 변 수 는 정의 되 지 않 은 것 인지 빈 값 이 있 는 지 알 수 있 습 니 다.
그러나 사람 이 명령 을 실행 할 때 힌트 를 보면 변수 가 정의 되 지 않 은 것 과 빈 값 을 구분 할 수 있 습 니 다.셸 프로그램 으로 하여 금 셸 변수 가 존재 하 는 지, 빈 값 이 있 는 지, 값 이 있 는 지 판단 하 게 합 니 다.(사람 이 육안 으로 볼 수 있 는 것 은 프로그램 이 식별 할 수 있 는 것 이 아니다)
물론 우 리 는 힌트 를 식별 하고 제시 내용 에 따라 판단 해 구분 하 는 것 도 번거롭다.
Shell 은 우리 가 위의 상황 에 직면 하 는 빈도 가 매우 높 을 것 이 라 고 생각 하기 때문에 Shell 은 상기 상황 을 판단 하 는 표현 식 을 준비 해 주 었 다.
우 리 는 먼저 변수의 테스트 와 내용 을 바 꾸 는 예 를 살 펴 보 겠 습 니 다. 다음 과 같 습 니 다.
변수 변환 방식
변수 y 가 설정 되 지 않 았 습 니 다 (정의 되 지 않 음)
변수 y 가 빈 값 입 니 다.
변수 y 설정 값x=${y- } x= x x=$y
설명:x=${y- } 표현 식 을 통 해 변수 x 의 값 이 무엇 인지 판단 한 다 는 뜻 이다.
변수 y 의 값 이 정의 되 지 않 으 면 변수 x 의 값 은 새 값 과 같 습 니 다.
변수 y 의 값 이 비어 있 으 면 변수 x 의 값 도 비어 있 습 니 다 (사실은 ${y- }.
변수 y 에 값 이 있 으 면 변수 x 의 값 은 변수 y 의 값 과 같 습 니 다.
이 변수의 테스트 는 테스트 변수 y 가 값 이 있 는 지, 없 는 지, 정의 되 지 않 은 지 여부 입 니 다.
그리고 결 과 를 변수 x 에 할당 합 니 다.
동 리 는 변수 x 의 값 을 통 해 변수 y 의 상황 이 무엇 인지 판단 할 수 있다.
2. 변수의 테스트 와 내용 교체
변수 변환 방식
변수 y 가 설정 되 지 않 았 습 니 다 (정의 되 지 않 음)
변수 y 가 빈 값 입 니 다.
변수 y 설정 값x=$y x=${y- } x= x x=$y x=${y:- } x= x= x=$y x=${y+ } x x= x= x=${y:+ } x x x= x=${y= } x= ,y= x ,y x=$y,y x=${y:= } x= ,y= x= ,y= x=$y,y
새 값 을 표준 오류 출력 으로 출력 (바로 화면)x=${y? } x x=$y
새 값 을 표준 오류 출력 으로 출력 합 니 다.
새 값 을 표준 오류 출력 으로 출력 합 니 다.x=${y:? }
설명:
  • 대괄호 안에 ':' 가 없 으 면 변수 y 가 비어 있 는 지, 설정 되 어 있 지 않 은 지, 처리 방법 이 다 릅 니 다.대괄호 안에 ":"가 있 으 면 변수 y 는 비어 있 든 없 든 처리 방법 이 같 습 니 다.
  • 대괄호 안에 '-' 또는 '+' 가 있 으 면 변수 x 값 을 바 꿀 때 변수 y 는 변 하지 않 고 대괄호 안에 '=' 이 있 으 면 변수 x 값 을 바 꾸 는 동시에 변수 y 의 값 도 변 한다.
  • 대괄호 안에 '?"변수 y 가 존재 하지 않 거나 비어 있 을 때"새 값 "을 오류 로 화면 에 출력 합 니 다.
  • 3. 예시
    예 1
    #   1:     y,    
    #     
    [root@Lyl ~]# x=${y-new}
    
    #     y   ,  x=new
    [root@Lyl ~]# echo $x
    new
    
    #     y,    y      
    [root@Lyl ~]# echo $y
    
    [root@Lyl ~]# 
    
    
    #   2:  y  
    #     y  
    [root@Lyl ~]# y=""
    
    #     
    [root@Lyl ~]# x=${y-new}
    
    #   x   y    
    [root@Lyl ~]# echo $x
    
    [root@Lyl ~]# echo $y
    
    [root@Lyl ~]# 
    
    
    #   3:  y  
    #    y  
    [root@Lyl ~]# y=old
    
    #     
    [root@Lyl ~]# x=${y-new}
    
    #   x   y    old
    [root@Lyl ~]# echo $x
    old
    [root@Lyl ~]# echo $y
    old
    [root@Lyl ~]# 
    

    예 2
    # =    
    
    #   1:     y,    
    #     
    [root@Lyl ~]# x=${y:=new}
    
    #   x   y    new
    [root@Lyl ~]# echo $x
    new
    [root@Lyl ~]# echo $y
    new
    
    
    #   :
    #     “=” ,    y   x        ,
    #      1      x  。
    
    #   2:  y  
    #     y  
    [root@Lyl ~]# y=""
    
    #     
    [root@Lyl ~]# x=${y:=new}
    
    #   x   y    new
    [root@Lyl ~]# echo $x
    new
    [root@Lyl ~]# echo $y
    new
    
    #   ;
    #          ":",    y       ,          。
    
    #   3:  y  
    #    y  
    [root@Lyl ~]# y=old
    
    #     
    [root@Lyl ~]# x=${y:=new}
    
    #   x   y    old
    [root@Lyl ~]# echo $x
    old
    [root@Lyl ~]# echo $y
    old
    
    

    예 3
    # ?    
    
    #   1:     y,    
    #     
    #    "new"      。
    [root@Lyl ~]# x=${y?new}
    -bash: y: new
    
    #   2:  y  
    #     y  
    [root@Lyl ~]# y=""
    
    #     
    [root@Lyl ~]# x=${y?new}
    
    #   x   y    
    [root@Lyl ~]# echo $x
    
    [root@Lyl ~]# echo $y
    
    [root@Lyl ~]# 
    
    
    #   3:  y  
    #    y  
    [root@Lyl ~]# y=old
    
    #     
    [root@Lyl ~]# x=${y?new}
    
    #   x   y    old
    [root@Lyl ~]# echo $x
    old
    [root@Lyl ~]# echo $y
    old
    

    좋은 웹페이지 즐겨찾기