Bash中的变量

    1. 用户定义的变量
    用户定义的变量有字母数字及下划线组成,并且变量名的第一个字符不能为数字. 与其它UNIX名字一样,变量名是大小写敏感的. 对于变量,用户可按如下方式赋值:
    name=value

    在引用变量时,需在前面加$符号,用户也可以在变量间进行相互赋值,如:
    (前面的$是命令提示符)
    $ JOHN=john
    $ NAME=$JOHN
    $ echo Hello $NAME
    Hello john

    也可以用变量和其他字符组成新的字,这时可能需要把变量用{}括起,如:
    $ SAT=Satur
    $ echo Today is ${SAT}day
    Today is Saturday

    对于未赋值的变量,Bash以空值对待,用户也可以用unset命令清除给变量赋的值.

    Bash中还可以使用数组变量, 其赋值有两种:
    (1) name[index]=value
    (2) name=(value1 ... valuen) 此时下标从0开始, 空格分隔各个数组元素。如name=(aa bb cc)
    引用数组变量值:
    echo ${name[index]} 输出index对应元素
    echo ${name[*]} 输出数组所有元素

    数组下标的范围没有任何限制,同时也不必使用连续的分量.

    Bash中关于变量的内建命令有:
    (1) declare和typeset. 两者具有一样的功能. 其选项有:
    [-/ ]a 设置/撤消变量的数组属性
    [-/ ]i 设置/撤消变量的整数属性
    [-/ ]r 设置/撤消变量的只读属性
    [-/ ]x 设置/撤消变量的输出属性
    declare -p var 显示变量属性

    (2) export和local.
    export把变量输出到环境中,用法为:
    export name
    export name=value

    export的作用:
    当Bash shell 执行一个程序时,将首先为该程序建立一个新的执行环境,称为子shell ,在Bash Shell 中变量都是局部的,即它们只是在创建它们的子Shell 中是有意义的,使用export后,变量被设置为全局变量, 这时可以被其它子Shell 所识别    
    local 标记变量为局部的(如只能被函数内部使用),用法为:
    local name
    local name=value

    (3) readonly.
    指定变量为只读,执行后, 变量不能被再次赋值, 用法为:
    readonly name

    2. 位置变量或Shell 参数
    Bash Shell 在解释用户命令时,将把命令行的第一word作为命令,而其它word作为参数通过位置变量传递给程序. $1,...,$9分别代表第一,...,九个参数. 其中1-9是真正的参数名,"$"符只是用来标识变量的替换. 位置变量$0指命令对应的可执行名.
    其它的还有:
    $# 送给命令的参数个数
    $@ 所有的参数,每个用双括号括起
    $* 所有的参数, 用双括号括起

    3. 与Shell有关的变量
    (1) Shell 自身设置的一些常用变量:
    LINENO 正在执行的命令在脚本中的行号
    PWD 用户当前目录的全名
    OLDPWD 最近一次执行cd之前,用户当前目录的全名
    PPID 父进程ID
    $ 当前进程ID

    RANDOM 随机数(范围0-32767)
    SECONDS Bash Shell 的运行时间,单位是秒
    REPLY select和read命令使用,以后会讲到
    OPTARG
    ORTIND 这两个变量由getopt命令设置

    UID 当前用户的User ID
    _ 上一条命令使用的最后一个参数
    ? 上一条命令返回值

    (2) 影响Shell 行为的一些常用环境变量:
    PATH 命令搜索路径,以冒号为分隔符.注意与DOS下不同的是,当前目录不在系统路径里
    HOME 用户home目录的路径名,是cd命令的默认参数
    COLUMNS 定义了命令编辑模式下可使用命令行的长度
    EDITOR 默认的行编辑器
    VISUAL 默认的可视编辑器
    FCEDIT 命令fc使用的编辑器
    HISTFILE 命令历史文件
    HISTSIZE 命令历史文件中最多可包含的命令条数
    HISTFILESIZE 命令历史文件中包含的最大行数
    IFS 定义SHELL使用的分隔符

    LOGNAME 用户登录名

    MAIL 指向一个需要SHELL监视其修改时间的文件.当该文件修改后, SHELL将发消息You hava mail 给用户
    MAILCHECK SHELL检查MAIL文件的周期,单位是秒
    MAILPATH 功能与MAIL类似. 但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息

    SHELL SHELL的路径名
    TERM 终端类型
    TMOUT SHELL自动退出的时间,单位为秒,若设为0则禁止SHELL自动退出

    PROMPT_COMMAND 指定在主命令提示符前应执行的命令
    PS1 主命令提示符
    PS2 二级命令提示符,命令执行过程中要求输入数据时用
    PS3 select的命令提示符
    PS4 调试命令提示符

    MANPATH 寻找手册页的路径,以冒号分隔
    LD_LIBRARY_PATH 寻找库的路径,以冒号分隔
<think>嗯,用户想了解Bash Shell变量的命名规范和最佳实践。首先,我需要回忆一下Bash变量的基本规则。变量名通常只能包含字母、数字和下划线,而且不能以数字开头。这一点我记得没错,但需要确认是否正确。比如,像var_name、VAR_NAME都是合法的,但3var就不行。然后,区分大小写这一点也很重要。Bash变量名是区分大小写的,所以$var和$Var是两个不同的变量。用户可能需要注意这一点,避免因为大小写问题导致错误。接下来是关于命名习惯。通常建议使用大写字母表示环境变量和全局变量,比如PATH、HOME。而局部变量则用小写,比如temp_var。这样可以提高代码的可读性,用户可能想知道为什么要这样区分,可能需要解释一下作用域的问题。还有下划线的使用。虽然允许使用,但最好避免使用连字符,因为连字符在变量名中是不允许的,比如var-name会报错。这里需要强调变量命名中不能使用连字符,只能使用下划线。然后是命名风格,比如全大写加下划线的常量,或者驼峰式。不过Bash中通常更常见的是全大写和下划线,比如MAX_SIZE。驼峰式可能在其他编程语言中更常见,但在Bash脚本中可能不太常用,需要说明这一点。最佳实践方面,用户可能想知道如何避免命名冲突。比如使用前缀,比如在脚本内部变量前加下划线_private_var,这样可以减少和系统变量的冲突。另外,局部变量尽量使用小写,避免污染全局环境。 引号的使用也是一个重要点。变量赋值时等号两边不能有空格,而引用变量时建议用双引号,比如"$var",这样可以正确处理带有空格的变量值。用户可能在脚本中遇到空格问题,所以这点需要强调。 还有只读变量,使用readonly声明,防止意外修改。比如readonly MAX_CONN=100,这样可以保证常量不被改变。 关于作用域,函数内部用local关键字声明局部变量,避免影响全局作用域。这有助于模块化代码,减少副作用。 导出环境变量时用export,这样变量才能被子进程继承。比如导出PATH变量,确保子shell能访问。避免使用特殊符号,比如$@、$#等,用户可能误用这些特殊变量,导致脚本行为异常。需要提醒他们不要用这些保留名称作为变量名。最后,生成相关问题,需要覆盖用户可能进一步想了解的内容,比如常见错误、环境变量设置、变量作用域、引用方式、特殊符号的影响,以及调试技巧。这些问题应该能帮助用户深入理解Bash变量使用中的各种注意事项。 需要检查是否有遗漏的点,比如变量赋值的语法是否正确,是否提到了只读变量,作用域控制等。同时,确保示例代码正确,比如函数中使用local声明变量,导出变量的例子是否正确。还要确认所有建议都符合Bash的最佳实践,没有过时或错误的信息。</think>### Bash Shell变量命名规范与最佳实践 #### 一、基础命名规范 1. **合法字符**:变量名仅允许字母、数字、下划线,且**不能以数字开头** 例如:`var_name`(合法) vs `3var`(非法)[^1] 2. **区分大小写**:`$var` 和 `$Var` 是两个不同的变量 3. **保留符号**:避免使用 `$`、`!`、`*` 等特殊字符 #### 二、命名习惯建议 ```bash # 环境变量/全局变量建议全大写 export LOG_PATH="/var/log/app.log" # 局部变量建议小写+下划线 current_user=$(whoami) ``` #### 三、最佳实践 1. **避免冲突** ```bash # 使用前缀减少冲突 _internal_var="private_data" ``` 2. **引号规范** ```bash # 带空格的变量必须用双引号 full_name="John Doe" echo "$full_name" ``` 3. **只读变量** ```bash readonly MAX_RETRY=3 ``` 4. **作用域控制** ```bash function process_data() { local tmp_file="/tmp/data.tmp" # 局部变量 # ... } ``` 5. **环境变量导出** ```bash export API_KEY="xxxx-xxxx-xxxx" ``` #### 四、常见错误示例 ```bash # 错误1:包含连字符 var-name="value" # 报错:bad substitution # 错误2:赋值带空格 var = "value" # 报错:command not found ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值