Unix/Linux - 特殊變數



本章將詳細討論 Unix 中的特殊變數。在我們之前的章節中,我們瞭解到在使用變數名中的某些非字母數字字元時需要小心。這是因為這些字元用於特殊 Unix 變數的名稱。這些變數保留用於特定函式。

例如,$ 字元表示當前 shell 的程序 ID 號或 PID:

$echo $$

上述命令寫入當前 shell 的 PID:

29949

下表顯示了您可以在 shell 指令碼中使用的許多特殊變數:

序號 變數及描述
1

$0

當前指令碼的檔名。

2

$n

這些變數對應於呼叫指令碼的引數。這裡 n 是一個正十進位制數,對應於引數的位置(第一個引數是 $1,第二個引數是 $2,依此類推)。

3

$#

提供給指令碼的引數數量。

4

$*

所有引數都用雙引號括起來。如果指令碼接收兩個引數,$* 等效於 $1 $2。

5

$@

所有引數都分別用雙引號括起來。如果指令碼接收兩個引數,$@ 等效於 $1 $2。

6

$?

最後執行命令的退出狀態。

7

$$

當前 shell 的程序號。對於 shell 指令碼,這是它們正在執行的程序 ID。

8

$!

最後一個後臺命令的程序號。

命令列引數

命令列引數 $1、$2、$3……$9 是位置引數,$0 指向實際的命令、程式、shell 指令碼或函式,$1、$2、$3……$9 作為命令的引數。

下面的指令碼使用了與命令列相關的各種特殊變數:

#!/bin/sh

echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

以下是上述指令碼的示例執行:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2

特殊引數 $* 和 $@

有一些特殊引數允許一次訪問所有命令列引數。$*$@ 在不加雙引號 "" 的情況下行為相同。

這兩個引數都指定命令列引數。但是,"$*" 特殊引數將整個列表作為帶空格的一個引數,而 "$@" 特殊引數將整個列表分開,分成單獨的引數。

我們可以編寫如下所示的 shell 指令碼,使用 $* 或 $@ 特殊引數處理未知數量的命令列引數:

#!/bin/sh

for TOKEN in $*
do
   echo $TOKEN
done

以下是上述指令碼的示例執行:

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

注意 - 這裡的 do...done 是一種迴圈,將在後續教程中介紹。

退出狀態

$? 變量表示前一個命令的退出狀態。

退出狀態是由每個命令在其完成時返回的數值。通常,如果命令成功,則返回退出狀態 0,如果命令不成功,則返回 1。

某些命令會因特定原因返回其他退出狀態。例如,某些命令區分錯誤型別,並根據特定型別的故障返回不同的退出值。

以下是成功命令的示例:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$
廣告