要了解位置變量,首先要知道什么是變量?
變量就是讓某一個特定的字符串來代表不固定的內容,簡單理解就是用一個簡單的“字眼”來替代另一個比較復雜或者容易變動的數據。
而什么又是位置變量呢?
位置變量就是bash將傳遞給腳本的參數,按照位置不同,保存在不同的位置變量中,以便于腳本調用這些變量。
位置參數變量:
$1, $2, …: | 對應第1、第2等參數,shift [n]換位置 |
$0: | 命令本身 |
$*: | 傳遞給腳本的所有參數,全部參數合為一個字符串;代表“$1$2$3…” |
$@: | 傳遞給腳本的所有參數,每個參數為獨立字符串;代表“"$1" "$2" "$3" …” |
$#: | 傳遞給腳本的參數的個數 |
注:$@ ,$* 只在被雙引號包起來的時候才會有差異
示例:
編寫一個腳本來測試一下上述的位置參數變量:
這個示例,可以看到位置參數變量,在bash中就實現定義好的,按照位置分配不同的變量。在執行腳本的時候,后面直接跟參數,就會賦予不同的變量,這樣在腳本中就可以直接調用。通過示例可以證明,
$N(N表示不同的數字),及可表明第N個參數變量;$0表示命令本身。
注:第十個以上的位置參數變量要使用“{ }”括起來,如:${10}
示例:比較$10和${10}的區別
可以看到"$10"表示($1)0;"${10}"才表示第十個位置參數變量.所以10以上的位置參數變量,需要用配合"{ }"來使用。
示例:比較"$*"和"$@"的區別
可以看到:“touch "$*"”創建了一個名為“aa bb”的文件
而“mkdir "$@"”創建了aa和bb兩個目錄。
所以,"$*"和"$@"雖然都是表示全部的參數,但是"$*"是把所有的參數當成為一個整體,而"$@"則是把每個參數獨立看待。
需要注意的是,$*和$@只在被雙引號包起來的時候才會有差異。
讓我們來看下沒有加雙引號的情況:
如圖所示,使用“touch $*”是創建了cc和dd兩個文件,而“mkdir $@”因此存在同名文件而沒有創建成功,但是通過執行過程也可以看到,它是要創建cc和dd兩個目錄。所以以后使用"$*"或"$@"時,一定要加上雙引號。
還有一個位置參數變量為$#,這個變量表示傳遞給腳本的參數的個數,讓我們來看看如何使用這個變量。
可以看到$#表示位置參數的個數,并且在腳本中可以利用"$#"來判斷是否存在位置參數。
原創文章,作者:Groot,如若轉載,請注明出處:http://www.www58058.com/34071
總結的很全面,圖片清晰明了,完成的很認真,再接再厲!