_变量_是存放数据的地方。 Bash 有两种数据:字符串和数组。 数组我们稍后再讲。
像这样给变量赋值
name="value"
重要:等号两边_不能有空格_!
如果有空格,就像这个例子:
x = 10
bash 会调用命令x,并传入两个实参=和10!
变量也可以称为_参数_。 本文档中这两个术语可以互换使用。
bash 使用或设置的一些重要参数包括:
PATH:一个以冒号分隔的目录列表,用于查找外部命令。IFS:即“内部字段分隔符”。
下面我们会看到它的用法。PWD:你当前的工作目录。
它的值与pwd命令的输出相同。RANDOM:一个介于 0 和 32767 之间的伪随机整数。BASH_VERSION:正在运行的 bash 实例的版本字符串。变量名由_大写字母、小写字母、数字和下划线_组成。 不能以数字开头。
使用$varname语法可以获取参数的值。
x=10
echo "The value of x is $x"
为了防止变量名与周围文本混淆,可以用花括号把变量名括起来。
例如,要打印字符串10x10
echo "${x}x$x"
# or
echo "${x}x${x}"
一些风格指南建议在大多数情况下使用花括号,以提高可读性或保持一致性。
正如我们在命令和实参一课中讨论的,命令可以接受实参。 Bash 脚本也不例外。 当前 bash 实例的实参称为_位置参数_。 可以用这些特殊参数来获取:
$1:第一个位置参数$2 ... $9:后续参数${10} ...:两位数需要加花括号。$0:当前脚本的名称。shell 函数的实参也是位置参数,处理方式完全相同。 后面的课程中我们会进一步了解函数。
有一些_特殊参数_可以帮助你处理位置参数。
$#会展开为位置参数的_数量_。"$@"会展开为所有位置参数的列表,每个参数都是一个单独的单词。"$*"会展开为单个字符串,其中所有位置参数由一个字符连接在一起。
$IFS变量的_第一个字符_,默认是空格。"$@"是把位置参数传给另一个命令的最安全方式,同时能保持它们被安全引用。
你也会用它来遍历位置参数:
for arg in "$@"; do
do_something_with "$arg"
done
实践中,"$@"比"$*"更常用。
在 bash 脚本中经常要做的一个操作是捕获命令的输出并存入变量。 为此,你会用到_命令替换_。
var=$(command)
例如,要把字符串转换成大写,可以这样做:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
Bash 有很多内置功能来操作变量和字符串,这样你就不需要调用外部命令。
将文本转换为大写。
上一节我展示了如何使用tr把文本转换为大写。
在 bash 中这样做:
echo "${text^^}"
类似地,${text,,}会把值转换为小写。
如果变量为空,提供一个默认值。
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
搜索并替换。
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
还有很多其他有趣的参数扩展:提取子字符串、获取字符串长度、_赋值_默认值、从值的开头或结尾删除文本,等等。 可以在手册中了解它们。