【Shell指令碼學習8】Shell特殊變數:Shell $0, $#, $*, $@, $?, $$和命令列參數

來源:互聯網
上載者:User

標籤:

前面已經講到,變數名只能包含數字、字母和底線,因為某些包含其他字元的變數有特殊含義,這樣的變數被稱為特殊變數。

例如,$ 表示當前Shell進程的ID,即pid,看下面的代碼:

  1. $echo $$

運行結果

29949

 

特殊變數列表
變數 含義
$0 當前指令碼的檔案名稱
$n 傳遞給指令碼或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$# 傳遞給指令碼或函數的參數個數。
$* 傳遞給指令碼或函數的所有參數。
[email protected] 傳遞給指令碼或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$? 上個命令的退出狀態,或函數的傳回值。
$$ 當前Shell進程ID。對於 Shell 指令碼,就是這些指令碼所在的進程ID。
命令列參數

運行指令碼時傳遞給指令碼的參數稱為命令列參數。命令列參數用 $n 表示,例如,$1 表示第一個參數,$2 表示第二個參數,依次類推。

請看下面的指令碼:

  1. #!/bin/bash
  2. echo "File Name: $0"
  3. echo "First Parameter : $1"
  4. echo "First Parameter : $2"
  5. echo "Quoted Values: [email protected]"
  6. echo "Quoted Values: $*"
  7. echo "Total Number of Parameters : $#"

運行結果:

$./test.sh Zara AliFile Name : ./test.shFirst Parameter : ZaraSecond Parameter : AliQuoted Values: Zara AliQuoted Values: Zara AliTotal Number of Parameters : 2
$* 和 [email protected] 的區別

$* 和 [email protected] 都表示傳遞給函數或指令碼的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。

但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"[email protected]" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。

下面的例子可以清楚的看到 $* 和 [email protected] 的區別:

  1. #!/bin/bash
  2. echo "\$*=" $*
  3. echo "\"\$*\"=" "$*"
  4. echo "\$@=" [email protected]
  5. echo "\"\$@\"=" "[email protected]"
  6. echo "print each param from \$*"
  7. for var in $*
  8. do
  9. echo "$var"
  10. done
  11. echo "print each param from \$@"
  12. for var in [email protected]
  13. do
  14. echo "$var"
  15. done
  16. echo "print each param from \"\$*\""
  17. for var in "$*"
  18. do
  19. echo "$var"
  20. done
  21. echo "print each param from \"\$@\""
  22. for var in "[email protected]"
  23. do
  24. echo "$var"
  25. done

執行 ./test.sh "a" "b" "c" "d",看到下面的結果:

$*=  a b c d"$*"= a b c d[email protected]=  a b c d"[email protected]"= a b c dprint each param from $*abcdprint each param from [email protected]abcdprint each param from "$*"a b c dprint each param from "[email protected]"abcd
退出狀態

$? 可以擷取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。

退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。

不過,也有一些命令返回其他值,表示不同類型的錯誤。

下面例子中,命令成功執行:

$./test.sh Zara AliFile Name : ./test.shFirst Parameter : ZaraSecond Parameter : AliQuoted Values: Zara AliQuoted Values: Zara AliTotal Number of Parameters : 2$echo $?0$


$? 也可以表示函數的傳回值,後續將會講解。

【Shell指令碼學習8】Shell特殊變數:Shell $0, $#, $*, [email protected], $?, $$和命令列參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.