셸 의 반 따옴표,$()와${}을 구분 합 니 다.
반 따옴표 와$()의 역할 이 같 습 니 다.명령 교체(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
기억의 방법 은:\#왼쪽 을 지 웁 니 다(디스크 에서\#$왼쪽 에 있 습 니 다)
%는 오른쪽 을 제거 합 니 다.
하나의 기 호 는 최소 일치 이 고,두 기 호 는 최대 일치 이다.
변수 교체 문자
${}
의 다른 특수 용법 에 대해 서 는 상세 하 게 전개 되 지 않 으 며 구체 적 으로 참고 할 수 있 습 니 다셸 특수 문자.이상 은 셸 의 반 따옴표,$()와${}을 구분 하 는 상세 한 내용 입 니 다.셸 의 반 따옴표,$()와${}에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.