上一篇我们了解了Shell变量的定义和分类,对不同变量类型的特点和作用有了初步认识,今天我们将讲述Shell编程中变量该如何引用,将其融入到shell语句中,并进行相关操作。
Shell变量引用是指在Shell脚本中,使用变量名来获取该变量存储的值的过程。在Shell脚本中,使用变量引用的方法非常简单,只需要在变量名前加上"$
"符号即可。例如,定义一个变量name,可以使用$name
来引用该变量,在其他编程语言中,引用变量就是直接使用变量名name,这点是shell的特殊所在。
虽然变量引用非常简单,但在进行变量引用时,我们还是需要注意以下几点:
$
"符号,否则Shell会将变量名视为普通字符串。$
"符号之间不要有空格,否则Shell也会将变量名视为普通字符串。以下是一个简单的Shell脚本,可以对变量引用有个较为清晰的印象:
#!/bin/bash
name="Tom"
age=25
echo "My name is $name and I am $age years old."
执行该脚本后,输出结果为:
My name is Tom and I am 25 years old.
在这个例子中,我们可以看到shell变量是不需要指定数据类型的,而是与赋值相关,赋值整数表示等同于int类型,赋值字符串便等同于string类型。
在shell中,变量的引用符号主要包含四种:
引用符号 | 说明 |
---|---|
" " 双引号 | 屏蔽除美元符号$、反引号( ` )和反斜线( \ )之外的所有字符 |
’ ’ 单引号 | 屏蔽所有的字符 |
`` 反引号 | shell将反引号中的内容解释为系统命令 |
\ 反斜线 | 转义符,屏蔽下一个字符的特殊含义 |
使用$
符号是对变量的常规应用,在实际shell编程中,我们需要对变量进行一些特殊操作,这些操作我们只需要借助于特殊操作符号来进行,不用编写复杂的操作函数。
变量可以使用${}
符号进行操作,该符号用于引用变量的值,并可以对变量的值进行一些操作,例如获取字符串的长度、截取字符串等。
这种方式与 $var
类似,将变量的值插入到命令行中。不同之处在于,使用 ${} 语法可以在变量名后面添加其他字符,例如:
name="Tom"
echo ${name}_Doe
输出 “Tom_Doe”。
在变量不存在或为空时,使用默认值替换变量。
echo ${occupation:-"unemployed"}
如果变量 occupation 不存在或为空,将输出 “unemployed”。
这种方式与 ${var-default}
类似,不同之处在于,如果变量不存在或为空,将使用默认值替换变量,并将默认值赋值给变量。
echo ${age:=18}
echo $age
如果变量 age 不存在或为空,将输出 “18” 并将其赋值给变量 age。
在变量不存在或为空时,输出一条错误信息。
echo ${city:?"variable city is not set"}
如果变量 city 不存在或为空,将输出 “variable city is not set”。
从变量的指定位置开始截取指定长度的子字符串。
str="Hello, World!"
echo ${str:7:5} # 输出:World
我们从字符串变量 str 的第 7 个字符开始,截取 5 个字符的子字符串。
获取字符串的长度。
string="Hello, world!"
echo ${#string} # 输出:13,获取字符串的长度
字符串"Hello, world!"长度为13。
整数变量运算使用$(())
符号进行,可以进行算术运算。需要注意的是,(( ))
只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。我们可以使用$
获取 (( ))
命令的结果,这和使用$获得变量值是类似的。
x=5
y=3
echo $(($x + $y)) # 输出:8
上面的引用都是对变量本身的引用,如果将其放入字符串中,将形成对整个字符串的引用。$变量名
放入不同引号包含的字符串中,其含义并不一样。
如果将一个字符串使用单引号引用,字符串的所有字符(包括空格,$
等)都被解释为字符本身,我们称之为全引用。
echo 'Hello, World!'
这个命令输出 “Hello, World!”,在这个例子中,字符串中的逗号和空格被视为普通字符,而不是分隔符。
如果将一个字符串使用双引号引用,其中所包含的字符除美元符号($
)、反引号(`),以及反斜线(\)之外的所有其他的字符,都将被解释为字面意义,这称为部分引用。也就是说,在部分引用中,这三种字符仍然拥有特殊的涵义。例如,$
符号仍然可以用来引用变量的值。
name="Tom"
echo "My name is $name."
这个命令输出 “My name is Tom.”,在这个例子中,$name
被解析为变量 name 的值 “Tom”。
命令替换是一种将命令的输出作为参数传递给另一个命令或变量的方法。命令替换有两种形式:反引号和 $()
。反引号(`)或$()
用于将命令的输出作为参数传递给另一个命令或变量,其语法为:
command `subcommand`
command $(subcommand)
在这个语法中,subcommand 是一个要执行的命令,并将其输出作为参数传递给 command。
echo "Today is `date`."
echo "Today is $(date)."
命令输出 :
Today is Thu Apr 6 07:16:46 PDT 2023.
Today is Thu Apr 6 07:16:46 PDT 2023.
在上述例子中,date
命令的输出被传递给 echo 命令,并作为字符串 “Today is Thu Apr 6 07:16:46 PDT 2023.” 的一部分输出。
在 Shell 编程中,某些情况下,需要将某些特殊字符转义,以保证字符串的正确性,变量转义是一种常见的操作。转义使用反斜线表示,当反斜线后面的一个字符具有特殊的意义时,反斜线将屏蔽该字符的特殊意义,使得Shell按照该字符的字面意义来解释。
如果需要在字符串中插入 $
符号,可以使用转义字符 \。
name="Tom"
echo "My first name is $name."
echo "My second name is $name."
执行后输出 :
My first name is Tom.
My second name is $name.
在这个例子中,第一行$name
被解析为变量 name 的值 “Tom”,第二行$
被解析为字符 $
,而不是变量。
在 Shell 中,空格被用作命令行参数的分隔符。如果需要在字符串中使用空格,可以使用双引号或单引号将字符串括起来。
echo "My favorite food is pizza."
echo 'My favorite food is pizza.'
这两个命令都将输出 “My favorite food is pizza.”。
双引号或单引号用于将字符串括起来,如果需要字符串中再使用双引号或单引号,可以使用转义字符 \"或\'。
echo "He said, "Hello!""
echo 'He said, '''Hello!''''
执行后输出:
He said, "Hello!"
He said, 'Hello!'
通过上面讲解我们知道,在 Shell 中,反斜杠用于转义字符,那么如果需要在字符串中使用反斜杠,我们可以使用两个反斜杠 \\ 来进行转义。例如:
echo "C:\Windows\System32"
这个命令将输出 “C:\Windows\System32”。
通过本篇文章,我们了解了变量的引用方法和操作方法,熟悉了全引用、部分引用、替换和转义四种变量引用场景。在编程中,需要根据实际情况进行合理选择,以确保脚本的简洁和准确。
我是柒号华仔,如果这篇文章对您有帮助,欢迎点赞、评论、收藏。下一篇我们将进入shell条件测试和判断。