셸 프로 그래 밍 학습 노트 의 특수 변수 ($0, $1, $2, $?, $\#, $@, $*)
셸 프로 그래 밍 에 사용 할 수 있 는 특수 한 변수 가 있 습 니 다.이 변 수 는 스 크 립 트 에서 전역 변수 로 사용 할 수 있 습 니 다.
명칭.
설명 하 다.
$0
스 크 립 트 이름
$1-9
스 크 립 트 실행 시 인자 1 부터 인자 9 까지
$?
스 크 립 트 의 반환 값
$#
스 크 립 트 가 실 행 될 때 입력 한 인자 의 개수
$@
입력 한 매개 변수의 구체 적 인 내용 (입력 한 매개 변 수 를 여러 대상, 즉 모든 매개 변수의 목록 으로 합 니 다)
$*
입력 한 매개 변수의 구체 적 인 내용 (입력 한 매개 변 수 를 단어 로 함)
$@ 과 $* 의 차이 점:
$@ 과 $* 는 하나의 변 수 를 사용 하여 모든 매개 변수 내용 을 표시 할 수 있 지만 이 두 변수 사이 에는 차이 점 이 있 습 니 다.
$@: 입력 한 인 자 를 목록 대상 으로 합 니 다.
$*: 입력 한 인 자 를 단어 로 사용 합 니 다.
:
1 echo " :"$0
2 n=1
3 echo " \$@ :"$@
4 for temstr in "$@"
5 do
6 echo " $n :" $temstr
7 let n+=1
8 done
9
10
11 n=1
12 echo " \$* :"$*
13 for temstr in "$*"
14 do
15 echo " $n :" $temstr
16 let n+=1
17 done
:
1 $ ./test.sh 1 2 3 4
2 :./test.sh
3 $@ :1 2 3 4
4 1 : 1
5 2 : 2
6 3 : 3
7 4 : 4
8 $* :1 2 3 4
9 1 : 1 2 3 4
在上面的例子中,使用$@与$*是,都是用双引号引起来,但当$*不使用双引号时,结果与$@的结果相同。
原因分析:
当都使用双引号时,我们可以看到参数列表输出都是一样的,说明确实两个变量都可以存储所有的参数内容,也就显示出来两个变量之间的对参数处理的不同,即一个将其作为列表处理,一个讲所有参数作为一个单词处理。
当$*不适用双引号时,执行到for语句时,会首先将$*的值(1 2 3 4 )取出来,然后循环语句就变成了 for tem in 1 2 3 4 ,最后的输出结果也就变成了列表的循环输出。
1 : 2 #!/bin/bash 3 n=1 4 for tem in $* 5 do 6 echo $n is $tem 7 let n+=1 8 done 9
:
# ./test.sh 1 2 3 4 1 is 1 2 is 2 3 is 3 4 is 4
여기에 작은 따옴표, 작은 따옴표 와 따옴표 가 없 는 차 이 를 보충 합 니 다.
작은 따옴표:
보 이 는 것 이 바로 소득 이 라 고 할 수 있 습 니 다. 곧 작은 따옴표 안의 내용 을 그대로 출력 하거나 작은 따옴표 에서 보 이 는 것 이 무엇 인지 설명 하면 출력 합 니 다.
작은 따옴표:
따옴표 안의 내용 을 출력 하기;내용 에 명령, 변수 등 이 있 으 면 먼저 변 수 를 분석 한 다음 최종 내용 을 출력 합 니 다.
두 따옴표 내 명령 이나 변 수 를 쓰 는 방법 은 '명령 또는 변수' 또는 $(명령 또는 변수) 입 니 다.
따옴표 없 음:
내용 을 출력 하면 빈 칸 이 있 는 문자열 을 전체 출력 으로 보지 않 을 수 있 습 니 다.
내용 에 명령, 변수 등 이 있 으 면 먼저 변수, 명령 을 분석 한 다음 에 최종 내용 을 출력 합 니 다.
문자열 에 빈 칸 등 특수 문자 가 있 으 면 전체 출력 이 불가능 합 니 다. 작은 따옴표, 일반 연속 문자열, 숫자, 경로 등 을 사용 할 수 있 지만 작은 따옴표 로 대체 하 는 것 이 좋 습 니 다.
다음으로 전송:https://www.cnblogs.com/zhuandshao/p/7193564.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.