iT邦幫忙

DAY 21
3

我與BASH shell scripting的每一天系列 第 21

我與BASH的每一天 - [21] 特殊的參數變數符號: $@ 與 $*

BASH除了利用**$1,.. $9等10的特殊變數來代表參數順序之外,還有其他功能強大的特殊變數符號。例如$0代表程式本身、$#代表所有參數的個數、$@$*代表所有參數的內容、$?**代表函數或是程式的傳回值(0代表成功,否則代表失敗)。

基本上BASH利用空白來區隔每一個參數,但是如果你的輸入必須含有空白時(例如人名 First-name Last-name),就要特別處理以免被當成兩個不同的參數。**$@$***符號的功能基本上是一樣的,但是在面對含有空白字元的參數時,他們的意義就有點不同了。

當參數包含空白字元時,必須加上引號**”...”,所以$@$*符號也要加上引號,變成這種形式: "$@""$*"。可是這時候"$@""$*"就不同了,"$*"會把整列參數輸入當成是一個值來處理,而"$@"仍然會依空白來分隔參數列,但是會把引號”...”**中的字串(包含空白)當成一個值來處理。

例如當輸入參數為: I am “Iron Man”
**$@$***的內容都是: I am “Iron Man”
**"$@"**的內容是: “I”, “am”, “Iron Man” 三個
**"$*"**的內容是: "I am Iron Man” 一個

[系列文章]

我與BASH的每一天 - [1]利用bc命令來取得數字字串中的特定欄位值
我與BASH的每一天 - [2]直取字串變數中的特定欄位值
我與BASH的每一天 - [3] 利用awk來擷取特定欄位
我與BASH的每一天 - [4] 利用awk來擷取特定欄位-2
我與BASH的每一天 - [5] 利用awk來擷取特定欄位-3
我與BASH的每一天 - [6] 利用cut來擷取特定欄位
我與BASH的每一天 - [7] grep指令的妙用 - 1
我與BASH的每一天 - [8] grep指令的妙用 - 2
我與BASH的每一天 - [9] 正規化表示法 - 1
我與BASH的每一天 - [10] 正規化表示法 - 2
我與BASH的每一天 - [11] 正規化表示法 - 3
我與BASH的每一天 - [12] 正規化表示法 - 4
我與BASH的每一天 - [13] sed - 1
我與BASH的每一天 - [14] sed - 2
我與BASH的每一天 - [15] sed - 3
我與BASH的每一天 - [16] 多條件選擇 - case
我與BASH的每一天 - [17] 建立自動化的暫存檔 - mktemp
我與BASH的每一天 - [18] if 條件判斷的正規化用法
我與BASH的每一天 - [19] 複合式的條件判斷
我與BASH的每一天 - [20] 代表參數位置的特殊變數符號與shift


上一篇
我與BASH的每一天 - [20] 代表參數位置的特殊變數符號與shift
下一篇
我與BASH的每一天 - [22] while-loop與array的結合
系列文
我與BASH shell scripting的每一天31

尚未有邦友留言

立即登入留言