목차
쉘 스크립트를 작성할 때 일반적으로 $ ?, $ @ 등과 같은 일부 특수 문자가 사용됩니다.이 기사에서는 모든 쉘 특수 문자를 예제와 함께 소개합니다. 먼저 수집하는 것이 좋습니다!
1. 쉘 특수 문자
1.1 $ N
N은 숫자를 나타냅니다. 여기서 $ 0은 현재 스크립트 파일 이름을 나타내고 $ N (N> 0)은 아래와 같이 스크립트에 입력 된 N 번째 입력 매개 변수를 나타냅니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
[root@localhost ~]# ./shell.sh 1 2 3 4 5 6 7 8 9 10
./shell.sh 1 2 3 4 5 6 7 8 9 10
[root@localhost ~]#
참고 : $ 0 의 출력은 ./shell.sh입니다.
1.2 $ #
스크립트 또는 함수에 전달되는 매개 변수의 수는 다음과 같습니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo $#
[root@localhost ~]# ./shell.sh 1 2 3
3
[root@localhost ~]#
[root@localhost ~]# cat shell.sh
#!/bin/bash
funcTest() {
echo $#
}
funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh
4
[root@localhost ~]#
1.3 달러 *
아래와 같이 스크립트 또는 함수에 전달 된 모든 매개 변수를 나타냅니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo $*
[root@localhost ~]# ./shell.sh 1 2 3 4 5
1 2 3 4 5
[root@localhost ~]#
[root@localhost ~]# cat shell.sh
#!/bin/bash
funcTest() {
echo $*
}
funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh
1 2 3 4
[root@localhost ~]#
1.4 $ @
아래와 같이 스크립트 또는 함수에 전달 된 모든 매개 변수를 나타냅니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo $@
[root@localhost ~]# ./shell.sh 1 2 3 4 5
1 2 3 4 5
[root@localhost ~]#
[root@localhost ~]# cat shell.sh
#!/bin/bash
funcTest() {
echo $@
}
funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh
1 2 3 4
[root@localhost ~]#
$ @ 와 $ * 의 차이점 :
- 큰 따옴표로 묶지 않으면 두 기호는 동일하며 둘 다 $ 1 $ 2 $ 3 ...... 분리 된 형식으로 출력됩니다.
- 큰 따옴표로 묶인 경우 $ *는 모든 매개 변수를 전체적으로 출력합니다 (예 : "$ 1 $ 2 $ 3 ……"). $ @는 각 매개 변수를 구분합니다. 예 : $ 1 $ 2 $ 3 ……;
예를 들어 보겠습니다.
먼저 아래와 같이 동일한 상황을 살펴보십시오.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo "\$*"
for i in $*
do
echo $i
done
echo "\$@"
for i in $@
do
echo $i
done
[root@localhost ~]# ./shell.sh 1 2 3 4 5
$*
1
2
3
4
5
$@
1
2
3
4
5
[root@localhost ~]#
아래와 같이 차이점을 확인하십시오.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo "\$*"
for i in "$*"
do
echo $i
done
echo "\$@"
for i in "$@"
do
echo $i
done
[root@localhost ~]# ./shell.sh 1 2 3 4 5
$*
1 2 3 4 5
$@
1
2
3
4
5
[root@localhost ~]#
위의 예에서 큰 따옴표로 묶인 $ *에 포함 된 모든 매개 변수는 전체로 간주되고 "1 2 3 4 5"가 직접 출력되며 $ @의 매개 변수는 여전히 분리됩니다.
1.5 달러?
아래와 같이 이전 명령의 종료 상태 또는 함수의 반환 값을 나타냅니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
pwd
echo $?
ls -l /root/abc
echo $?
[root@localhost ~]# ./shell.sh
/root
0
ls: 无法访问/root/abc: 没有那个文件或目录
2
[root@localhost ~]#
첫 번째 $?의 값은 0으로 pwd 명령이 성공적으로 실행되었음을 나타내고 두 번째 $?의 값은 2로 마지막 명령 ls가 실행에 실패했음을 나타냅니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
funcTest(){
return 6
}
funcTest
echo $?
[root@localhost ~]# ./shell.sh
6
[root@localhost ~]#
[root@localhost ~]# cat shell.sh
#!/bin/bash
funcTest(){
echo "abc"
}
val=$(funcTest)
echo $?
[root@localhost ~]# ./shell.sh
0
[root@localhost ~]#
함수에 $?를 사용할 때 return 문이 있으면 return 문에서 반환 한 값을 가져 오며 범위는 0 ~ 255입니다. return 문이없는 경우 $?의 값은 함수에서 실행 된 마지막 명령의 반환 코드를 나타냅니다.
1.6 달러
아래와 같이 스크립트의 현재 프로세스 ID 번호를 나타냅니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
echo $$
[root@localhost ~]# ./shell.sh
26033
[root@localhost ~]#
1.7 $!
나타냅니다 의 ID 번호를 마지막으로 실행 에서 처리 배경을 , 또한 반드시 완료되지 않습니다 가장 최근에 실행중인 프로세스의 ID 번호로 이해 될 수있다.
[root@localhost ~]# top &
[2] 31702
[root@localhost ~]# echo $!
31702
[2]+ 已停止 top
[root@localhost ~]#
1.8 $-
아래와 같이 set 명령과 동일한 기능을하는 Shell 명령에서 사용하는 현재 옵션을 표시합니다.
[root@localhost ~]# cat shell.sh
#!/bin/bash
set -m
echo $-
set -C
echo $-
[root@localhost ~]# ./shell.sh
hmB
hmBC
[root@localhost ~]#
참고 : 두 번째 출력에서는 방금 설정 한 매개 변수 C가 추가됩니다.
둘째, 요약
글쎄요, 예제와 결합 된 Shell 특수 문자에 대한 설명이 끝났습니다. 기분이 좋으면 원 클릭 트리플 연결 만하세요. 궁금한 점이 있으면 댓글란에 메시지를 남겨주세요 ~