在 Bash 中使用变量

外壳变量可以是全局变量,也可以是局部变量。全局变量(或环境变量)可以在所有外壳中访问。而局部变量仅在当前外壳中可见。

要查看所有环境变量,请使用 printenv 命令。如果需要知道变量的值,请将变量名称作为自变量插入:

printenv PATH

也可以使用 echo 查看变量(无论是全局或本地变量):

echo $PATH

要设置局部变量,请使用变量名后加等号和值:

PROJECT="SLED"

不要在等号两边插入空格,否则会出错。要设置环境变量,请使用 export

export NAME="tux"

要删除变量,请使用 unset

unset NAME

下表包含外壳脚本中可以使用的一些常见环境变量:

表 7.5. 有用的环境变量

HOME

当前用户的用户主目录

HOST

当前主机名

LANG

当一个工具本地化后,它使用此环境变量中的语言。英语也可以设置为 C

PATH

外壳的搜索路径,冒号分隔的目录列表

PS1

指定在每个命令前打印的普通提示符

PS2

指定在执行多行命令时打印的辅助提示符

PWD

当前工作目录

USER

当前用户


使用自变量

例如,如果具有脚本 foo.sh,则可以如下执行:

foo.sh "Tux Penguin" 2000 

要访问传递给脚本的所有自变量,您需要定位参数。$1 表示第一个自变量,$2 表示第二个自变量,依此类推。至多可以有九个参数。要获取脚本名称,请使用 $0

以下脚本 foo.sh 打印从 1 到 4 的所有自变量:

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

如果使用上述自变量执行此脚本,将获取:

"Tux Penguin" "2000" "" ""

使用变量替换

变量替代将一个模式应用于变量的内容(从左侧或从右侧)。以下列表包含可能的语法格式:

${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
${VAR/pattern_1/pattern_2}

将来自 pattern_1VAR 的内容替代为 pattern_2

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