shell笔记-local、export用法 、declare、set

local一般用于局部变量声明,多在在函数内部使用。
    1.    Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。
    2.    Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。
    3.    如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    export:将自定义变量设定为系统环境变量(仅限于该次登陆操作,当前shell中有效)
    语  法:export [-fnp][变量名称]=[变量设置值]
    补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。
    参  数:
        -f  代表[变量名称]中为函数名称。
     -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
     -p  列出所有的shell赋予程序的环境变量。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Linux 指令篇:系统设置--declare  和set类似

功能说明:声明 shell 变量。

语  法:declare [+/-][rxi][变量名称=设置值] 或 declare -f

补充说明:declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。

参  数:
 +/-  "-"可用来指定变量的属性,"+"则是取消变量所设的属性。 
 -f  仅显示函数。 
 r  将变量设置为只读。 
 x  指定的变量会成为环境变量,可供shell以外的程序来使用。 
 i  [设置值]可以是数值,字符串或运算式。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<think> 我们面对的问题是:用户想了解env、printenv、exportdeclare -x在操作系统环境变量操作中的作用和用法。根据用户给出的引用和之前的问题,我们需要详细解释这些命令的功能、用法以及它们之间的区别。 首先,我们注意到用户提供的引用中提到了declare命令和export命令用于设置环境变量。引用[1]说明declare是一个shell内建命令,其中declare -x用于设置环境变量。引用[2]则给出了三种定义环境变量的方法:export、分步写法(先赋值再导出)以及declare -x。 接下来,我们将分别介绍env、printenv、exportdeclare -x这四个命令(或选项)的作用和用法。 1. env: - 作用:用于在指定的环境中运行程序,或者打印当前的环境变量。 - 用法: a. 打印当前环境变量:直接运行`env`,会列出所有环境变量及其值。 b. 在修改后的环境中运行命令:`env VAR1=value1 VAR2=value2 ... command [args]`,这样可以在不改变当前shell环境的情况下,为指定的命令设置临时的环境变量。 2. printenv: - 作用:打印环境变量。与env类似,但功能更单一,主要用于打印环境变量。 - 用法: a. 打印所有环境变量:`printenv` b. 打印某个特定的环境变量:`printenv VAR_NAME`(注意:如果变量不存在,则不输出任何内容) 3. export: - 作用:将shell变量设置为环境变量,使得该变量对子进程可见。环境变量是子进程继承自父进程的变量。 - 用法: a. 设置环境变量:`export VAR=value` (等同于`VAR=value; export VAR`) b. 将已存在的变量导出为环境变量:`export VAR` (前提是VAR已经被定义) c. 查看所有环境变量:`export -p` 或直接`export`(不带参数) 4. declare -x: - 作用:也是设置环境变量(在bash中)。declare命令用于声明变量和设置属性,-x选项表示将变量设置为环境变量,相当于export- 用法: a. 设置环境变量:`declare -x VAR=value` b. 将已存在的变量设置为环境变量:`declare -x VAR` (前提是VAR已经被定义) c. 查看所有环境变量:`declare -x` (会列出所有环境变量,包括函数等,但通常我们只关注变量) 注意:在bash中,使用`export`和`declare -x`设置环境变量是等价的。但是,export是POSIX标准的一部分,所以在各种shell中更通用;而declare是bash的扩展,在非bash的shell中可能不可用。 总结区别: - `env`和`printenv`主要用于查看环境变量,其中env还可以在临时环境中运行命令。 - `export`和`declare -x`用于设置环境变量,使得变量能够传递给子进程。 此外,需要注意的是,环境变量只在当前进程及其子进程中有效,不会影响父进程(比如当前的shell进程启动了一个子shell,在子shell中设置的环境变量不会影响父shell)。 下面我们用一个例子来演示这些命令的用法: 假设我们有一个变量MY_VAR,我们想将它设置为环境变量: - 方法1(使用export): `export MY_VAR=123` - 方法2(使用declare -x): `declare -x MY_VAR=123` 然后,我们可以用printenv或env来查看这个变量: - `printenv MY_VAR` 或者 `env | grep MY_VAR` 另外,如果要临时设置一个环境变量并运行一个命令,可以使用env: - `env MY_VAR=123 python my_script.py` 在脚本中,我们通常使用export来设置环境变量,因为这样更符合POSIX标准,可移植性更好。 最后,我们生成相关问题,以帮助用户进一步理解。 </think> ### env、printenv、exportdeclare -x 在环境变量操作中的作用与用法 #### 1. **`env` 命令** - **作用**: 1. 列出 **当前环境变量**(不带参数时) 2. 在 **临时修改的环境** 中执行命令(不改变当前 Shell 环境) - **用法示例**: ```bash env # 显示所有环境变量 env PATH=/new/path ls # 临时修改 PATH 后执行 ls 命令 ``` - **特点**:临时变量仅对当前命令生效[^1]。 #### 2. **`printenv` 命令** - **作用**: 专门用于 **打印环境变量**(功能比 `env` 更聚焦) - **用法示例**: ```bash printenv # 打印所有环境变量 printenv HOME # 仅打印 HOME 变量的值 ``` - **与 `env` 的区别**: `printenv` 不支持修改环境执行命令,但输出格式更简洁。 #### 3. **`export` 命令** - **作用**: 1. 将 **Shell 变量提升为环境变量**(使子进程可继承) 2. 查看当前环境变量(无参数时) - **用法示例**: ```bash export VAR=value # 定义环境变量(推荐) VAR=value; export VAR # 等价写法 export -p # 显示所有环境变量 ``` - **关键特性**: 通过导出变量,子进程(如脚本、程序)可访问该变量[^2]。 #### 4. **`declare -x` 命令** - **作用**: Bash 内建命令,用于 **声明环境变量**(功能与 `export` 类似) - **用法示例**: ```bash declare -x VAR=value # 定义环境变量 declare -x # 显示所有环境变量和函数 ``` - **与 `export` 的关系**: `declare -x` 是 Bash 特有语法,`export` 更符合 POSIX 标准,两者在多数场景可互换[^2]。 --- ### **核心区别总结** | 命令 | 主要用途 | 作用范围 | Shell 类型支持 | |---------------|-----------------------------------|------------------|---------------| | `env` | 查看环境变量或临时修改变量执行命令 | 临时(命令级) | 通用 | | `printenv` | 仅打印环境变量 | 当前 Shell | 通用 | | `export` | 提升变量为环境变量 | 当前 Shell 及子进程 | 通用(POSIX) | | `declare -x` | 声明环境变量(Bash 特有) | 当前 Shell 及子进程 | Bash | > **注意**: > - 环境变量的修改**仅对当前 Shell 及其子进程有效**,重启终端后失效。 > - 永久生效需写入配置文件(如 `~/.bashrc` 或 `/etc/profile`)。 --- ### **典型应用场景** 1. **临时调试环境**: ```bash env http_proxy=http://proxy:8080 curl example.com ``` 2. **脚本中传递变量**: ```bash export API_KEY="secret" # 子脚本可通过 $API_KEY 读取 ./run_script.sh ``` 3. **安全声明只读变量**: ```bash declare -xr DB_PASSWORD="p@ssw0rd" # 导出为只读环境变量 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值