Shell 의 기본 문법
관례 에 따 르 면 Shell 변 수 는 전체 대문자 와 밑줄 로 구성 되 고 두 가지 유형의 Shell 변수 가 있 습 니 다.
환경 변수
환경 변 수 는 부모 프로 세 스에 서 하위 프로 세 스에 전 달 될 수 있 기 때문에 셸 프로 세 스 의 환경 변 수 는 현재 셸 프로 세 스에 서
fork
나 온 하위 프로 세 스에 전 달 될 수 있 습 니 다.printenv
명령 으로 현재 셸 프로 세 스 의 환경 변 수 를 표시 할 수 있 습 니 다.로 컬 변수
현재 Shell 프로 세 스에 만 존재 합 니 다.
set
명령 으로 현재 Shell 프로 세 스에 정 의 된 모든 변수 (로 컬 변수 와 환경 변수 포함) 와 함 수 를 표시 할 수 있 습 니 다.환경 변 수 는 모든 프로 세 스 가 가지 고 있 는 개념 이 고 로 컬 변 수 는 Shell 특유 의 개념 입 니 다.Shell 에서 환경 변 수 는 로 컬 변수의 정의 와 용법 이 비슷 합 니 다.Shell 에서 변 수 를 정의 하거나 할당 합 니 다:
$ VARNAME=value
등호 양쪽 에 빈 칸 이 있어 서 는 안 됩 니 다. 그렇지 않 으 면 셸 에 의 해 명령 과 명령 행 인자 로 해 석 됩 니 다.
하나의 변 수 를 정의 한 후 현재 셸 프로 세 스에 만 존재 합 니 다. 로 컬 변수 입 니 다.
export
명령 으로 로 컬 변 수 를 환경 변수 로 내 보 낼 수 있 습 니 다. 환경 변 수 를 정의 하고 내 보 낼 수 있 습 니 다.$ export VARNAME=value
두 단계 로 나 누 어 완성 할 수도 있다.
$ VARNAME=value
$ export VARNAME
unset
명령 으로 정 의 된 환경 변수 나 로 컬 변 수 를 삭제 할 수 있 습 니 다.$ unset VARNAME
만약 에 하나의 변수 가
VARNAME
이 라 고 부 르 면 ${VARNAME}
으로 그 값 을 표시 할 수 있 고 나 쁜 의 미 를 일 으 키 지 않 는 상황 에서 도 $VARNAME
로 그 값 을 표시 할 수 있다.다음 의 예 를 통 해 이 두 가지 표현법 의 차 이 를 비교한다.$ echo $SHELL
$ echo $SHELLabc
$ echo $SHELL abc
$ echo ${SHELL}abc
변 수 를 정의 할 때 $를 사용 하지 않 고 변 수 를 가 져 올 때 $를 사용 해 야 합 니 다.C 언어 와 달리 Shell 변 수 는 유형 을 명확 하 게 정의 할 필요 가 없습니다. 사실은 Shell 변수의 값 은 모두 문자열 입 니 다. 예 를 들 어 우리 가 정의 하 는
VAR=45
, 사실은 VAR
의 값 은 정수 가 아 닌 문자열 45
입 니 다.Shell 변 수 는 먼저 정의 한 후에 사용 할 필요 가 없습니다. 정의 되 지 않 은 변 수 를 가 져 오 면 빈 문자열 입 니 다.2. 파일 이름 변경 (Globbing): *?[]
일치 하 는 문 자 를 마스크 (Wildcard) 라 고 부 릅 니 다. 구체 적 으로 다음 과 같 습 니 다.
시계. 31.1. 어댑터
*
0 개 이상 의 임의의 문자 일치
?
임의의 문자 일치
[약간의 문자]
일치 하 는 괄호 의 임의의 문자 가 나타 납 니 다.
$ ls /dev/ttyS*
$ ls ch0?.doc
$ ls ch0[0-2].doc
$ ls ch[012][0-9].doc
Globbing 이 일치 하 는 파일 이름 은 Shell 에서 전개 되 었 습 니 다. 즉, 인자 가 프로그램 에 전달 되 기 전에 이미 전개 되 었 습 니 다. 예 를 들 어 상기
ls ch0[012].doc
명령 은 현재 디 렉 터 리 에 ch00.doc
와 ch02.doc
가 있 으 면 ls
명령 에 전 달 된 매개 변 수 는 실제 적 으로 이 두 파일 이름 이지 일치 하 는 문자열 이 아 닙 니 다.3. 명령 대체: '또는 $()
반 따옴표 로 묶 은 것 도 명령 입 니 다. Shell 은 이 명령 을 먼저 실행 한 다음 출력 결 과 를 현재 명령 줄 로 즉시 대체 합 니 다.예 를 들 어 변수 저장
date
명령 의 출력 을 정의 합 니 다.$ DATE=`date`
$ echo $DATE
명령 대체 도 사용 할 수 있다
$()
.$ DATE=$(date)
4. 산술 대체: $()
산술 계산 에 사용 되 며
$(())
의 Shell 변 수 는 정수 로 변 환 됩 니 다. 예 를 들 어:$ VAR=45
$ echo $(($VAR+3))
$(())
에 서 는 + - * / 와 () 연산 자 만 사용 할 수 있 고 정수 연산 만 할 수 있다.5. 전의 문자 /
C 언어 와 유사 하 다.예 를 들 면:
$ echo $SHELL
/bin/bash
$ echo /$SHELL
$SHELL
$ echo //
/
예 를 들 어 '$$' 라 는 파일 을 만 드 는 것 은 다음 과 같 습 니 다.
$ touch /$/ /$
또 하나의 문 자 는 특별한 의 미 를 가지 고 있 지 는 않 지만 파일 이름 을 만 드 는 것 도 귀 찮 습 니 다. 바로 - 번호 입 니 다.파일 이름 - 번호 로 시작 하 는 파일 을 만 들 려 면 안 됩 니 다.
$ touch -hello
touch: invalid option -- h
Try `touch --help' for more information.
덧 붙 여 / 전의 하 더 라 도 잘못 보고 합 니 다.
$ touch /-hello
touch: invalid option -- h
Try `touch --help' for more information.
각종 유 닉 스 명령 은 파일 이름 대신 - 번호 로 시작 하 는 명령 행 인 자 를 명령 의 옵션 으로 사용 하기 때문이다.굳이 - 번호 로 시작 하 는 파일 이름 을 처리 하려 면 두 가지 방법 이 있 습 니 다.
$ touch ./-hello
혹은
$ touch -- -hello
/ 또 하나의 용법 이 있 습 니 다. / 뒤에서 차 를 두 드 려 서 속 행 을 표시 합 니 다. Shell 은 명령 을 즉시 실행 하지 않 고 커서 를 다음 줄 로 옮 겨 서 속 행 알림 부 호 를 줍 니 다 > 사용자 가 계속 입력 하 기 를 기다 리 고 마지막 으로 모든 속 행 을 받 아서 하나의 명령 으로 실행 합 니 다.예 를 들 면:
$ ls /
> -l
(ls -l )
6. 작은 따옴표
C 언어 와 달리 Shell 스 크 립 트 의 작은 따옴표 와 작은 따옴표 는 문자 의 정의 문자 가 아 닌 문자열 의 정의 문자 입 니 다.작은 따옴표 는 따옴표 안의 모든 문자 의 액면 가 를 유지 하 는 데 사 용 됩 니 다. 따옴표 안의 / 와 리 턴 도 예외 가 아니 지만 문자열 에 작은 따옴표 가 나타 나 면 안 됩 니 다.따옴표 가 맞지 않 으 면 Enter 를 입력 하면 Shell 은 따옴표 에 맞 게 연결 해 달라 고 요구 합 니 다.예 를 들 면:
$ echo '$SHELL'
$SHELL
$ echo 'ABC/( )
> DE'( )
ABC/
DE
7. 작은 따옴표
따옴표 는 따옴표 안의 모든 문자 의 액면 가 를 유지 하 는 데 사용 되 지만 다음 과 같은 경 우 는 제외 합 니 다.
$ echo "$SHELL"
/bin/bash
$ echo "`date`"
Sun Apr 20 11:22:06 CEST 2003
$ echo "I'd say: /"Go for it/""
I'd say: "Go for it"
$ echo "/"( )
>"( )
"
$ echo "//"
/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.