Bash中的位置參數和特殊參數

#Bash中的位置參數和特殊參數

#Bash中的位置參數是由0之外的一個或多個數字表示的參數。
#位置參數是當Shell或Shell函數被引用時由Shell或Shell函數的參數賦值,而且能夠使用Bash的內部命令set來從新賦值。位置參數N能夠被引用爲${N},或當N只含有一個數字時被引用爲$N

# $ set 1 2 3 four five six 7 8 9 ten
# $ echo "$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}"
# 1 2 3 four five six 7 8 9 ten

#位置參數不能經過賦值語句來賦值,而只能經過Bash的內部命令set和shift來設置和取消它們。當Shell函數運行時,位置參數會被臨時地替換。

shell

 1 #===========================================================================================
 2 #
 3 #
 4 #                                    FILE:param.sh
 5 #                                    USAGE:./param.sh                              
 6 #    DESCRIPTION:
 7 #    
 8 #         OPTIONS:---
 9 #    REQUIREMENTS:---
10 #            BUGS:---
11 #           NOTES:---
12 #          AUTHOR:Yuan Shaoqian,yuanshaoqiancom@gmail.com
13 #    ORGANIZATION:
14 #         CREATED:09/02/2016 22:38
15 #        REVISION:---
16 #===========================================================================================
17 echo "Argument 1 : $1"
18 echo "Argument 2 : $2"
19 echo "Argument 3 : $3"
20 echo "Argument 4 : $4"
21 echo "Argument 5 : $5"
22 <<COMMENT
23 root@yuan:/root # ./param.sh one two three four five
24 Argument 1 : one
25 Argument 2 : two
26 Argument 3 : three
27 Argument 4 : four
28 Argument 5 : five
29 COMMENT

特殊參數:函數

Bash對一些參數的處理比較特殊,這些參數只能被引用,但不能修改它們的值,這些參數分別是*、@、#、?、-、$、!、0、_spa

一、特殊參數*,將擴展爲從1開始的全部位置參數。若是擴展發生在雙引號內,即「$*」,則擴展爲包含每一個參數值的單詞,每一個參數值用特殊變量IFS的第一個字符分隔:「$*」等價於「$1c$2c$3c...」,其中c就是IFS中第一個字符,若是變量IFS沒有定義任何字符,則參數之間默認用空格分隔。若是IFS爲空,則參數直接相連,中間沒有分隔。code

例1:blog

1 $ set one two three
2 $ echo "$*"
3 one two three

例2:three

1 $ IFS=":;\"
2 $ set one two three
3 $ echo "$*"
4 one:two:three

二、特殊參數@for循環

特殊參數@,也將擴展爲1開始的全部位置參數。但當它的擴展發生在雙引號內時,每一個參數都擴展爲分隔的單詞:「$@」,等價於「$1」、「$2」、「$3」.....參數@和*之間的區別在於將於for循環的調用中顯現出來。class

三、特殊參數#變量

特殊參數#,將擴展爲位置參數的個數,用十進制表示:擴展

1 $ set one two three
2 $ echo $#
3 3

四、特殊參數?

特殊參數?,將擴展爲最近一個前臺執行的命令的退出狀態。能夠使用它來檢測shell腳本執行是否成功,一般退出狀態爲0表示命令已經沒有任何錯誤地結束運行。

例:

 1 $ touch newfile
 2 $ echo $?
 3 0
 4 
 5 $ls newfile
 6 $ echo $?
 7 0
 8 
 9 $ rm -f newfiile
10 $ echo $?
11 0
12 
13 $ ls newfile
14 $ echo $?
15 2

未完成

相關文章
相關標籤/搜索