Bash 기술: $로 변수 값 을 가 져 오 려 면 따옴표 나 괄호 를 추가 해 야 하 는 지 자세히 설명 합 니 다.

3384 단어 linuxbashshell
이 글 은 리 눅 스 bash 셸 에서 $ 변수 값 을 가 져 올 때 따옴표 를 추가 할 지, 괄호 를 늘 릴 지 여 부 를 소개 한다.
$로 변수 값 을 가 져 올 때 따옴표 를 추가 할 지 여부 입 니 다.
bash 셸 스 크 립 트 에서 $ 로 변수 값 을 가 져 올 때, 예 를 들 어 $arg 더 블 인덱스 를 추가 하지 않 는 경우 가 있 습 니 다.예 를 들 어 "$arg".다음은 이 두 가지 형식 간 의 차 이 를 구체 적 으로 설명 한다. 어떤 상황 에서 더 블 따옴표 를 넣 어야 하 는 지, 어떤 상황 에서 더 블 따옴표 를 넣 지 않 아 도 되 는 지 를 설명 한다.
bash 에 서 는 매개 변수 간 에 기본적으로 격 리 됩 니 다.매개 변수 값 자체 에 빈 칸 이 있 을 때 따옴표 를 추가 하지 않 고 매개 변수 값 을 묶 지 않 으 면 이 매개 변수 값 은 여러 매개 변수 값 으로 확장 되 어 원래 의 전체 값 을 잃 을 수 있 습 니 다.구체 적 인 예 는 다음 과 같다.
$ function test_args() { echo \$\#: $#; echo first: $1; echo second: $2; }
$ args="This is a Test"
$ test_args $args
$#: 4
first: This
second: is
$ test_args "$args"
$#: 1
first: This is a Test
second:

여기 testargs 함수, 입력 된 $1, $2 매개 변수 값 을 인쇄 합 니 다.주어진 args 변수 가 지정 한 문자열 에는 빈 칸 이 있 습 니 다.
실행 test_args $args 할 때 args 변수의 값 은 빈 칸 으로 네 개의 매개 변수 로 분리 되 어 있 음 을 볼 수 있 습 니 다.실행 test_args "$args" 시 args 변수의 값 은 변 하지 않 고 매개 변수 로 여 겨 집 니 다.두 따옴표 로 문자열 을 묶 으 면 빈 칸 으로 단 어 를 나 누 는 것 을 피 할 수 있 습 니 다.
즉, 변수 자체 의 값 을 완전 하 게 유지 해 야 하고 빈 칸 에 여러 개의 매개 변수 로 확장 되 지 않 으 려 면 작은 따옴표 로 묶 어야 합 니 다.
스 크 립 트 나 함수 에 파 라 메 터 를 전달 할 때 가 져 온 매개 변수 값 이 빈 칸 이 있 는 지 확인 하지 못 할 수 있 습 니 다.빈 칸 이 있어 서 예상 치 못 한 단 어 를 나 누 어 매개 변수 개수 에 변 화 를 일 으 키 지 않도록 매개 변 수 는 작은 따옴표 로 묶 는 것 을 권장 합 니 다.
$로 변수 값 을 가 져 오 려 면 괄호 를 늘 려 야 합 니까?
bash 셸 스 크 립 트 에서 $ 로 변수 값 을 가 져 올 때 괄호 를 추가 하지 않 는 경우 가 있 습 니 다. 예 를 들 어 $var.예 를 들 어 ${var} 괄호 를 늘 리 는 경우 도 있다.다음은 이 두 가지 형식 간 의 차 이 를 구체 적 으로 설명 한다. 어떤 상황 에서 괄호 를 늘 려 야 하 는 지, 어떤 상황 에서 괄호 를 늘 리 지 않 아 도 되 는 지 를 설명 한다.
man bash 에서 ${parameter} 표현 식 에 대한 의 미 를 보면 다음 과 같다.
${parameter}
The value of parameter is substituted.
The braces are required when parameter is a positional parameter with more than one digit, or when parameter is followed by a character which is not to be interpreted as part of its name.
The parameter is a shell parameter or an array reference (Arrays).
즉, 대괄호 {} 의 역할 은 대괄호 안의 문자열 을 하나의 전체 로 한정 하고 인접 한 문자 와 다른 의 미 를 조합 하지 않 는 다 는 것 이다.
예 를 들 어 var 변수 값 은 "Say"입 니 다. 이 변 수 를 인쇄 하고 "Hello"문자열 을 따라 인쇄 하려 고 합 니 다. 즉, "Say Hello"문자열 을 인쇄 하 는 것 입 니 다.그러면 var 변수 값 을 가 져 오 는 구문 과 "Hello"문자열 사이 에 빈 칸 이 있 으 면 안 됩 니 다. 그렇지 않 으 면 echo 명령 은 이 빈 칸 을 함께 인쇄 합 니 다.그러나 원 하 는 효과 에 이 르 지 못 한다 고 썼 다.구체 적 인 예 는 다음 과 같다.
$ var="Say"
$ echo $var Hello
Say Hello
$ echo $varHello

$ echo ${var}Hello
SayHello
$ echo "$var"Hello
SayHello
$varHello 이런 표기 법 이 인쇄 된 'Say' 와 'Hello' 사이 에 원 하 는 결과 가 아 닌 빈 칸 이 있 는 것 을 볼 수 있다.$var Hello 인쇄 가 비어 있 습 니 다. 이것 은 바로 varHello 변 수 를 가 져 오 는 값 입 니 다. 이 변 수 는 정의 되 지 않 았 고 기본 값 은 비어 있 습 니 다.$varHello 원 하 는 결 과 를 출력 했 습 니 다. ${var}Hello var 로 묶 어서 가 져 올 변수 이름 을 var 로 명확 하 게 지정 하여 헷 갈 리 지 않도록 합 니 다.{} 따옴표 로 "$var"Hello 를 묶 으 면 뒤의 'Hello' 문자열 과 구분 할 수 있 습 니 다.
즉, $var 로 변수 값 을 가 져 올 때 변수 이름 뒤에 공백 문 자 를 따라 다른 내용 을 분리 하면 큰 괄호 로 변수 이름 을 묶 지 않 아 도 된다.
변수 이름 뒤에 변수 이름 자체 에 속 하지 않 는 다른 문 자 를 직접 따 르 려 면 이 변수의 이름 을 명확 하 게 하기 위해 큰 괄호 로 묶 어야 합 니 다.

좋은 웹페이지 즐겨찾기