셸 의 반 따옴표,$()와${}을 구분 합 니 다.

1.따옴표 와$()는 명령 을 바 꾸 는 데 사 용 됩 니 다.
반 따옴표 와$()의 역할 이 같 습 니 다.명령 교체(command substitution),즉 인 용 된 명령 의 실행 을 완료 하고 그 결 과 를 교체 합 니 다.변수 교체 와 차이 가 많 지 않 습 니 다.예 를 들 면:

echo `date '--date=1 hour ago' +%Y-%m-%d-%H`
#  
echo $(date '--date=1 hour ago' +%Y-%m-%d-%H)
출력 결 과 는 같 습 니 다:
2019-02-02-09。
Shell 스 크 립 트 를 작성 할 때$()를 사용 하 는 것 을 권장 합 니 다.그 이 유 는 다음 과 같 습 니 다.
(1)반 따옴표 와 작은 따옴표 의 외형 이 비슷 하여 헷 갈 리 기 쉽다.
(2)다 차원 적 인 복합 교체 에서 안쪽 의 반 따옴표 는 전의 처리(\\)가 필요 하고$()는 비교적 직관 적 이다.예 를 들 어 아래 명령 형식 이 틀 렸 습 니 다.

command1 `command2 `command3``
원래 의 의 도 는'command 2'command 3'에서 command 3 를 교체 하여 command 2 에 처리 한 다음 에 결 과 를 command 1 에 전달 하 는 것 이다.그러나 진정한 결 과 는 명령 행 에서'command 2'와'두 단락 으로 나 뉘 었 다.정확 한 입력 은 다음 과 같 아야 합 니 다.

command1 `command2 \`command3\``
#    $()
command1 $(command2 $(command3))
(3)반 따옴표 에서 역 슬 래 쉬 에 대해 특별한 처 리 를 하고 반 협 의 를 사용 하여 Shell 의 특수 문 자 를 전의 할 때 두 개의 역 슬 래 쉬 가 필요 하 며$()에 서 는 하나의 역 슬 래 쉬 만 사용 해 야 한다.예 를 들 어 아래 의 스 크 립 트 는 환경 변수 HOME 의 내용 이 아니 라 출력$HOME이 필요 합 니 다.반 따옴표 에서$자 를 쌍 역 슬 래 쉬 로 바 꿔 야 합 니 다.$()에서 하나의 역 슬 래 쉬 만 사용 해 야 합 니 다.

var1=`echo \$HOME`		#            $    
var2=`echo \\$HOME`
var3=$(echo \$HOME)
echo $var1
echo $var2
echo $var3
스 크 립 트 실행 결과:
/root
$HOME
$HOME
다시 말 하면 반 따옴표 는 오래된 용법 입 니 다.$()는 새로운 용법 입 니 다.학습 이 든 실제 작업 이 든$()를 사용 하 는 것 을 권장 합 니 다.
2.${}변수 교체 에 사용
2.1 직접 변수 교체
일반적인 상황 에서$var${var}는 다 르 지 않 지만${ }로 변수 명칭 의 범 위 를 비교적 정확하게 정의 할 수 있다.예 를 들 어:

A="dablelv"
echo $AB
원래$A의 결 과 를 먼저 교체 한 다음 에 B 자 모 를 추가 하려 고 했 지만 명령 행 에서 실제 결 과 는 변수 이름 이 AB 인 값 만 바 꾸 는 것 이다.사용${}하면 괜 찮 습 니 다.

echo ${A}B
2.2 특수 변수 교체${}변수 내용 을 직접 교체 하 는 것 외 에 문자열 변수 에 사용 되 는 특수 한 기능 도 있다.만약 우리 가 문자열 변 수 를 정의 했다 면:

file="/dir1/dir2/dir3/my.file.txt"
2.2.1${:}${::}문자열 추출 에 사용
문자열 추출 은${:}${::}를 사용 할 수 있 습 니 다.
(1) ${var:n}n 이 정수 라면 n 은 0 부터 변수 var 에서 n 번 째 문자 부터 끝 에 있 는 모든 문 자 를 추출 하 는 것 을 나타 낸다.n 이 음수 라면 문자열 의 마지막 면 n 의 절대 값 문 자 를 추출 하고 사용 할 때 콜론 뒤에 빈 칸 이나 산술 표현 식 또는 전체 num 에 괄호 를 추가 합 니 다.예 를 들 어${var: -2},${var:1−3}또는${var:(-2)}는 모두 마지막 두 문 자 를 추출 하 는 것 을 표시 합 니 다.

${file:1}:   1            :dir1//dir2/dir3/my.file.txt
${file: -3}:    3   ,            :txt
${file:1-4}:    3   ,           :txt
${file:(-3)}:    3   ,           :txt
(2) ${var:n1:n2} ${var:n1:n2}아래 표 시 된 n1 부터 뒤의 n2 문 자 를 추출 하 는 데 사 용 됩 니 다.그 중에서 아래 표 시 된 n1 과 n2 는 0 부터 시작 합 니 다.

${file:0:5}:      5   :/dir1
${file:5:5}:    5          5   :/dir2
2.2.2${/}${//}문자열 모드 일치 교체 에 사용${var/pattern/pattern}var 문자열 의 첫 번 째 일치 하 는 pattern 을 다른 pattern 으로 바 꾸 는 것 을 표시 합 니 다.원 변 수 를 바 꾸 지 않 습 니 다.

${file/dir/path}:    dir   path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:   dir   path:/path1/path2/path3/my.file.txt
2.2.3${#},${##},${%}${%%}문자열 모드 일치 절단 에 사용
원 변 수 를 바 꾸 지 않 고 지정 한 규칙 에 맞 는 문자열 을 걸 러 낼 수 있 습 니 다.

${file#*/}:      /         :dir1/dir2/dir3/my.file.txt
${file##*/}:       /         :my.file.txt
${file#*.}:      .         :file.txt
${file##*.}:       .         :txt
${file%/*}:       /         :/dir1/dir2/dir3
${file%%/*}:      /         :(  )
${file%.*}:       .         :/dir1/dir2/dir3/my.file
${file%%.*}:      .         :/dir1/dir2/dir3/my
기억의 방법 은:
\#왼쪽 을 지 웁 니 다(디스크 에서\#$왼쪽 에 있 습 니 다)
%는 오른쪽 을 제거 합 니 다.
하나의 기 호 는 최소 일치 이 고,두 기 호 는 최대 일치 이다.
변수 교체 문자${}의 다른 특수 용법 에 대해 서 는 상세 하 게 전개 되 지 않 으 며 구체 적 으로 참고 할 수 있 습 니 다셸 특수 문자.
이상 은 셸 의 반 따옴표,$()와${}을 구분 하 는 상세 한 내용 입 니 다.셸 의 반 따옴표,$()와${}에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기