linux shell中的位置參數變量

要了解位置變量,首先要知道什麼是變量?

 變量就是讓某一個特定的字符串來代表不固定的內容,簡單理解就是用一個簡單的“字眼”來替代另一個比較複雜或者容易變動的數據。

而什麼又是位置變量呢?

 位置變量就是bash將傳遞給腳本的參數,按照位置不同,保存在不同的位置變量中,以便於腳本調用這些變量。


位置參數變量:

$1, $2, ...:對應第1、第2等參數,shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,全部參數合爲一個字符串;代表“$1$2$3...”
$@: 傳遞給腳本的所有參數,每個參數爲獨立字符串;代表“"$1" "$2" "$3" ...”
$#: 傳遞給腳本的參數的個數

    注:$@ ,$* 只在被雙引號包起來的時候纔會有差異

示例:

編寫一個腳本來測試一下上述的位置參數變量:

wKioL1etLpzQ0pAsAAAicntt0IU651.png

wKioL1etL4_ihoOoAAAb9rwyZNM341.png

這個示例,可以看到位置參數變量,在bash中就實現定義好的,按照位置分配不同的變量。在執行腳本的時候,後面直接跟參數,就會賦予不同的變量,這樣在腳本中就可以直接調用。通過示例可以證明,

$N(N表示不同的數字),及可表明第N個參數變量;$0表示命令本身。

注:第十個以上的位置參數變量要使用“{ }”括起來,如:${10}

示例:比較$10和${10}的區別

wKiom1etaGGSXahMAAAytwJ30i0261.png

可以看到"$10"表示($1)0;"${10}"才表示第十個位置參數變量.

示例:比較"$*"和"$@"的區別

首先在一個空目錄下編寫了一個測試腳本,測試過程如圖所示:wKiom1etc8uyaeHwAABFaGeTyR8481.png

可以看到:“touch "$*"”創建了一個名爲“aa bb”的文件

而“mkdir "$@"”創建了aa和bb兩個目錄。

所以,"$*"和"$@"雖然都是表示全部的參數,但是"$*"是把所有的參數當成爲一個整體,而"$@"則是把每個參數獨立看待

需要注意的是,$*和$@只在被雙引號包起來的時候纔會有差異。讓我們來看下沒有加雙引號的情況:

wKioL1etdVXz-pqwAABEKhFhuV8890.png

如圖所示,使用“touch $*”是創建了cc和dd兩個文件,而“mkdir $@”因此存在同名文件而沒有創建成功,但是通過執行過程也可以看到,它是要創建cc和dd兩個目錄。所以以後使用"$*"或"$@"時,一定要加上雙引號。


還有一個位置參數變量爲$#,這個變量表示傳遞給腳本的參數的個數,讓我們來看看如何使用這個變量。

wKioL1eteh7gyLEQAAAsJ07jSto193.png

可以看到$#表示位置參數的個數,並且可以利用"$#"來判斷是否存在位置參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章