Shell 变量
直接回答
- Shell 变量用于存储数据,定义时不加
$
,如name="张三"
。 - 使用变量需加
$
,如echo $name
或${name}
。 - 变量类型包括字符串、整数、数组和环境变量,如
PATH
。 - 可进行操作如只读(
readonly
)、删除(unset
)和字符串截取。
定义与使用
Shell 变量是脚本中存储数据的名称。定义变量时,变量名不加 $
,如 name="张三"
,等号两边不能有空格。使用时加 $
,如 echo $name
,复杂场景可加大括号如 ${name}_file
。
变量类型
- 字符串:如
str="hello"
,单引号不解析变量,双引号解析。 - 整数:用
declare -i
,如declare -i num=42
。 - 数组:如
array=(1 2 3)
,读元素用${array[0]}
。 - 环境变量:系统定义,如
PATH
(命令搜索路径),用export
导出。
操作与管理
- 设置只读:
readonly var
,不可更改。 - 删除变量:
unset var
。 - 字符串操作:长度
${#str}
,截取${str:1:3}
。 - 默认值:
${var:-default}
,如未定义用默认值。
更多详情可参考 菜鸟教程 – Shell 变量 和 网道 – Bash 变量。
调查笔记
以下是关于 Shell 变量的详细分析,涵盖定义、使用、类型和操作等内容,旨在为用户提供全面的中文讲解。
背景与需求分析
用户请求“Shell 变量中文讲解”,表明他们希望了解 Shell 脚本中变量的定义、用法和相关操作。由于 Shell 变量是脚本编程的基础,我们需要提供清晰、系统的解释,特别针对中文学习者的需求。
资源搜索与筛选
通过网络搜索“Shell 变量中文讲解”,找到多个相关资源,包括 菜鸟教程 – Shell 变量、网道 – Bash 变量、C语言中文网 – Shell变量的定义、赋值和删除 和 CSDN博客 – Shell —— 变量的声明和使用。这些资源涵盖了变量的定义、类型、操作和环境变量等内容。
详细讲解
定义与命名规则
Shell 变量用于存储数据值,定义时变量名不加 $
,如 your_name="runoob"
。命名规则如下:
- 只能包含字母、数字和下划线。
- 不能以数字开头,必须以字母或下划线开始。
- 区分大小写,如
HOME
和home
是不同变量。 - 避免使用 Shell 关键字(如
if
、for
)。
示例:
- 有效:
RUNOOB="www.runoob.com"
、LD_LIBRARY_PATH="/bin/"
。 - 无效:
if="some_value"
、variable with space="value"
。
使用变量
使用变量时需加 $
,如 echo $your_name
。为避免歧义,可用大括号 ${variable}
,尤其在变量名与其他字符相连时,如 echo "I am good at ${skill}Script"
。如果变量未定义,引用时返回空字符串。
转义 $
可输出字面值,如 echo The total is \$100.00
。嵌套变量用 ${!varname}
,如 myvar=USER; echo ${!myvar}
输出当前用户。
变量类型
Shell 变量主要包括以下类型:
- 字符串:所有变量默认是字符串,可用单引号
' '
或双引号" "
定义。单引号不解析变量,如str='hello $name'
输出hello $name
;双引号解析,如str="hello $name"
输出hello 张三
。 - 整数:用
declare -i
声明,如declare -i num=42
,支持算术运算。 - 数组:支持一维数组,无大小限制,定义如
array=(1 2 3)
。读元素用${array[0]}
,所有元素用${array[@]}
,长度用${#array[@]}
。 - 环境变量:系统或用户定义,当前 Shell 和子 Shell 可使用。如
PATH
(命令搜索路径)、HOME
(主目录)、SHELL
(当前 Shell 类型)。用env
或printenv
查看所有环境变量,单变量用echo $VARIABLE
。 - 特殊变量:如
$0
(脚本名)、$1
、$2
(参数)、$#
(参数个数)、$?
(上一命令退出状态)、$$
(当前 Shell 进程 ID)、$!
(后台命令进程 ID)。
变量操作
- 赋值与重定义:直接用
variable=value
,如name="张三"
,重定义如name="李四"
。多变量一行用;
分隔,如foo=1;bar=2
。 - 只读变量:用
readonly varname
或declare -r varname
设置,不可更改或删除,尝试会报错。 - 删除变量:用
unset varname
,如unset name
,删除后引用返回空字符串。 - 字符串操作:
- 长度:
${#string}
,如echo ${#name}
输出 2。 - 截取:
${string:offset:length}
,如echo ${name:0:2}
输出 前两个字符。 - 查找子串:
expr index "$string" substring
,如expr index "runoob" oo
输出 4。 - 数组操作:
- 定义:
array=(value1 value2)
,索引从 0 开始。 - 读元素:
${array[index]}
,如${array[0]}
。 - 长度:
${#array[@]}
或${#array[*]}
。
环境变量与导出
环境变量可在当前 Shell 和子 Shell 中使用,用 export varname
或 export varname=value
导出。如 export PATH=$PATH:/new/path
。子 Shell 修改不影响父 Shell。
查看环境变量:
env
或printenv
:列出所有。echo $VARIABLE
:查看单变量。
默认值与错误处理
Shell 支持变量默认值语法:
${varname:-word}
:如果varname
未定义或为空,返回word
,如${count:-0}
。${varname:=word}
:如果未定义或为空,设置并返回word
,如${count:=0}
。${varname:+word}
:如果定义且非空,返回word
,如${count:+1}
。${varname:?message}
:如果未定义