5.5 使用 Bash 中的變數

外圍程序變數可以是全域變數或本地變數。您可以在所有外圍程序中存取全域變數或環境變數。與此相反,本地變數僅顯示於目前的外圍程序中。

要檢視所有環境變數,請使用 printenv 指令。如需特殊變數,請將變數名稱做為引數插入。

printenv PATH

也可以使用 echo 檢視變數︰

echo $PATH

此指令可列印 PATH 變數。要設定本地變數,請使用變數名稱,後面跟上等號,再跟上值︰

PROJECT="SLED"

請不要在等號兩邊插入空格,否則將會出錯。要設定環境變數,請使用 export

export NAME="tux"

要移除變數,請使用 unset

unset NAME

下表包含了部分可在外圍程序程序檔中使用的常用環境變數︰

表 5-5 有用的環境變數

HOME

目前使用者的主目錄

HOST

目前的主機名稱

LANG

工具當地化以後,會使用此環境變數指定的語言。也可將英語設定為 C

PATH

外圍程序的搜尋路徑,即以冒號分隔的目錄清單。

PS1

指定在每條指令前列印的一般提示

PS2

指定執行多行指令時列印的輔助提示

PWD

目前的工作目錄

USER

目前的使用者

5.5.1 使用引數變數

例如,如果您有程序檔 foo.sh,就可以按以下格式執行該程序檔︰

foo.sh "Tux Penguin" 2000 

要存取傳送至程序檔的所有引數,您需要使用位置參數。$1 代表第一個引數的位置參數,$2 代表第二個引數的位置參數,依此類推。最多可以使用九個參數。要獲取程序檔名稱,請使用 $0

下面的程序檔 foo.sh 可列印從 1 到 4 的所有引數︰

#!/bin/sh
echo \"$1\" \"$2\" \"$3\" \"$4\"

如果您使用以上引數執行此程序檔,所得結果為︰

"Tux Penguin" "2000" "" ""

5.5.2 使用變數替代項

變數替代項會從左側或右側將模式套用至變數內容。以下清單包含了可用的語法格式︰

${VAR#pattern}

從左側移除最短的相符項︰

file=/home/tux/book/book.tar.bz2
echo ${file#*/}
home/tux/book/book.tar.bz2
${VAR##pattern}

從左側移除最長的相符項︰

file=/home/tux/book/book.tar.bz2
echo ${file##*/}
book.tar.bz2
${VAR%pattern}

從右側移除最短的相符項︰

file=/home/tux/book/book.tar.bz2
echo ${file%.*}
/home/tux/book/book.tar
${VAR%%pattern}

從右側移除最長的相符項︰

file=/home/tux/book/book.tar.bz2
echo ${file%%.*}
/home/tux/book/book