1. 程式人生 > >在linux中,$*和[email protected]有什麼區別?

在linux中,$*和[email protected]有什麼區別?

看了很多的相關文章,似懂非懂。現在,終於真正理解了它們兩者之間的區別。

首先我們看如下一個bash命令:

./start.sh "a b" "c" "d"

請問,給start.sh指令碼傳遞了幾個引數?

大部分人都知道,總共傳遞了3個引數,其中,$1等於a b,$2等於c,$3等於d。

現在,我們想在start.sh中呼叫另外一個指令碼begin.sh,同時將start.sh的引數傳給這個指令碼。

如果引數只有三個,那麼我們可以這樣寫:

begin.sh $1 $2 $3

如果引數不固定,可能有三個,可能有四個,那我們怎麼把引數傳遞給begin.sh呢?

我們可以這樣寫:

begin.sh

[email protected]

這種寫法等價於:

begin.sh $1 $2 $3...

此時在begin.sh中,$1等於a b,$2等於c,$3等於d

如果我們這樣寫:

begin.sh $*

那麼,這種寫法等價於:

begin "$1 $2 $3..."

此時在begin.sh中,$1等於a b c d。

[email protected]和$*的區別在於:[email protected]會把當前指令碼的引數獨立的傳遞給子指令碼($1 $2 $3),$*則把當前指令碼的引數合併為一個引數("$1 $2 $3")傳遞給子指令碼,子指令碼在讀取引數時,

[email protected]將讀取到多個引數,$*將只讀取到一個合併後的引數。