셸 프로 그래 밍 학습 노트 의 특수 변수 ($0, $1, $2, $?, $\#, $@, $*)

7102 단어
특수 변수 ($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

좋은 웹페이지 즐겨찾기