shell命令--变量

发布时间 2023-04-15 15:13:14作者: 是对的人

1. 定义变量

shell 支持一下三种定义变量的方式:

variable=value
variable='value'
variable="value"

variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符,那么可以不用引号;否则就必须使用引号。注意,赋值号=的周围不能有空格。

Shell 变量的命名规范和大部分编程语言都一样:

  • 变量名由数字、字母、下划线组成;
  • 必须以字母或者下划线开头;
  • 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。

2. 使用变量

使用一个定义过的变量,只要在变量名前面加符号 $ 即可,如:

#!/bin/bash

val=hello
echo $val
echo ${val}

其结果为:

hello
hello

变量名外面的花括号 {} 是可选的,加不加都可以。但是,建议加上,会给你避免不少麻烦。

3. '' 和 ""的区别

定义变量时,变量的值可以由单引号 '' 包围,也可以由双引号 "" 包围,它们到底有什么区别呢?下面以示例来说明:

#!/bin/bash

val=world
str1='hello ${val}'
str2="hello ${val}"
echo ${str1}
echo ${str2}
str3='ls: $(ls)'
str4="ls: $(ls)"
echo ${str3}
echo ${str4}

其结果为:

hello ${val}
hello world
ls: $(ls)
ls: cstring.sh

以单引号 '' 包围时,不会解析内部的变量和命令等,里面是什么就直接原样赋值给变量。

以双引号 "" 包围时,会先解析内部的变量和命令等,然后再将解析后的内容赋值给变量。

4. `` 和 $()

shell 支持将命令的执行结果赋值给变量,常见的有以下两种方式:

variable=`command`
variable=$(command)

第一种方式把命令用反引号 ``(位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;

第二种方式把命令用 $() 包围起来,区分更加明显,所以推荐使用这种方式。

5. 只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

例如:

#!/bin/bash

readonly val=hello
val=world

其结果为:

cstring.sh: line 4: val: readonly variable