Shell 变量

在定义变量时无论有没有使用引号,值都以字符串形式存储, 即使将整数或小数赋值给变量,它们也会被视为字符串。

[TOC]

定义变量

常规方式

var="abc"
# 或
var='abc'
# 或
var=abc

只读变量

# 只读变量
readonly var="123"
# 环境只读变量
export readonly var="123"

declare 方式

declare var="abc"
# -i 表示为整形
declare -i var=0
# -x 表示为环境变量
declare -x var="abc"
# -r 表示为只读变量
declare -r var="abc"
  1. “=” 号左右不允许存在空格

  2. 变量名使用字母,下划线开头

  3. 只读变量设置后不能修改,不可撤销,如果想要变量失效,则需要退出当前 shell。

使用变量

echo $var
# 或
echo ${var}

单引号和双引号区别

以单引号' '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令,也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景

以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义

a="123"
b='${a}'
c="${a}"
echo ${b} ${c}
# ${a} 123

变量及函数撤销

# 删除变量
unset <var_name>
# 删除函数
unset -f <function_name>

unset 不能删除只读变量

变量类型

本地变量

只在当前 Shell 中有效,对其他的 Shell 进程无效,包括当前 Shell 的子进程

局部变量

只对当前函数或代码段有效。

local var="123"

全局变量

#/bin/bash

# 默认为全局变量
var="abc"

# 局部变量
echo_local_var() {
    local var="123"
    echo ${var}
}

echo_var() {
    var="098"
    echo ${var}
}

echo ${var}
# local 只影响函数内的变量
echo_local_var
echo ${var}
# 全局变量,相当与覆盖原值
echo_var
echo ${var}

#########
# echo 输出
# abc
# 123
# abc
# 098
# 098
##########

环境变量

当前 Shell 和子进程有效。

export var="123"

特殊变量

变量

意义

$#

传入脚本参数的个数。

$?

上一条命令的状态返回值(0 - 255)。0:上一条命令执行正确;1-255:上一条命令执行错误。

$*、$@

参数列表。

${n}

$0:脚本本身;$1:第一个参数;${n}:第 n 个参数。

$$

当前 Shell 的 PID。

  1. ${@:起点}:表示由起点开始(包括起点),取得后面的所有的位置参数

  2. ${@:起点:个数}:表示由起点开始(包括起点),取得指定个数的位置参数

  3. $@、$*只在被双引号包起来的时候会有差异

  4. $*:传递给脚本的所有参数,全部参数合为一个字符串

  5. $@:传递给脚本的所有参数,每个参数为独立字符串

  6. shift:剔除参数。

#!/bin/bash

echo ${@}
echo ${@:2}
echo ${@:2:3}

bash test.sh 1 2 3 4 5
#####
# 1 2 3 4 5
# 2 3 4 5
# 2 3 4
#####

Shell 变量

Shell 特殊变量

bash变量详解

Last updated

Was this helpful?