[현학 현 망 & Shell 기초] - 21. 변수의 테스트 와 내용 교체
우리 가 전에 말 했 듯 이 셸 에서 하나의 변 수 는 정의 되 지 않 았 고 하나의 변수 가 빈 값 인 출력 효과 와 같 습 니 다.
# 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:? }
설명:
예 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.