shell变量/环境变量和set/env/export用法_转

转自:shell环境变量以及set,env,export的区别

一.shell环境变量的分类以及set env export的区别:

set:显示(设置)shell变量,包括的私有变量以及用户变量。不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样。

env:显示(设置)用户变量变量。

export:显示(设置)当前导出成用户变量的shell变量。

export 显示当前导出成用户变量的shell变量,并显示变量的属性(是否只读),按变量名称排序;
declare 同set 一样,显示当前shell的定义的变量,包括用户的环境变量。

注:shell变量定义赋值可在shell中直接“name=value”设置,而不是用set设置,set是用来显示变量和设置sh的参数与选项。

举个例子来讲:

[Oracle@zhou3 ~]$ aaa=bbb --shell变量设定     
[oracle@zhou3 ~]$ echo $aaa      
bbb     
[oracle@zhou3 ~]$ env| grep aaa --设置完当前用户变量并没有     
[oracle@zhou3 ~]$ set| grep aaa  --shell变量有     
aaa=bbb     
[oracle@zhou3 ~]$ export| grep aaa --这个指的export也没导出,导出变量也没有     
[oracle@zhou3 ~]$ export aaa   --那么用export 导出一下     
[oracle@zhou3 ~]$ env| grep aaa  --发现用户变量内存在了     
aaa=bbb 

总结:Linux 分 shell变量(set),用户变量(env)。shell变量包含用户变量,export是一种命令工具,是显示那些通过export命令把shell变量中包含的用户变量导入给用户变量的那些变量.

 

二:使用unset命令来清除环境变量,注意set env  export设置的变量,都可以用unset来清除的

    清除环境变量的值用unset命令。如果未指定值,则该变量值将被 设为NULL。示  例如下:    $ export TEST="Test..." #增加一个环境变量TEST    $ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了    TEST=Test...    $ unset $TEST #删除环境变量TEST    $ env|grep TEST #此命令没有输出,证明环境变量TEST已经不存在了  

 

三:使用readonly命令设置只读变量

    使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:  $ export TEST="Test..." #增加一个环境变量TEST  $ readonly TEST #将环境变量TEST设为只读  $ unset TEST #会发现此变量不能被删除  -bash: unset: TEST: cannot unset: readonly variable  $ TEST="New" #会发现此也变量不能被修改  -bash: TEST: readonly variable  

 

四:最根本的设置、更改变量的配置文件 ~/.bash_profile   ~/.bashrc   ~/.bash_logout

~/.bash_profile  用户登录时被读取,其中包含的命令被执行

~/.bashrc  启动新的shell时被读取,并执行

~/.bash_logout  shell 登录退出时被读取

 

此外,shell(这里指bash)的初始化过程是这样的:

1.bash 检查文件/etc/profile 是否存在

2. 如果存在,bash 就读取该文件,否则,跳过

3.bash 检查主目录下的文件.bash_profile 是否存在。

4. 如果存在,bash 就读取該文件,否则,跳过

5.bash 检查主目录下的.bash_login 是否存在。

6. 如果存在,bash 就读取该文件,否则,跳过

7.bash 检查主目录下的文件.profile 是否存在

8. 如果存在, bash 就读取该文件,否则,跳过。

这些步骤都执行完后,就出现提示符了, ksh 默认提示符是 $.

 

五:常见的shell变量

PATH 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge) 不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls)。 
ROOTPATH 这个变量的功能和PATH相同,但它只罗列出超级用户(root)键入命令时所需检查的目录。 
LDPATH 这个变量包含了一系列用冒号隔开的目录,动态链接器将在这些目录里查找库文件。
MANPATH 这个变量包含了一系列用冒号隔开的目录,命令man会在这些目录里搜索man页面。 
INFODIR 这个变量包含了一系列用冒号隔开的目录,命令info将在这些目录里搜索info页面。 
PAGER 这个变量包含了浏览文件内容的程序的路径(例如less或者more)。 
EDITOR 这个变量包含了修改文件内容的程序(文件编辑器)的路径(比如nano或者vi)。 
KDEDIRS 这个变量包含了一系列用冒号隔开的目录,里面放的是KDE相关的资料。
CONFIG_PROTECT 这个变量包含了一系列用空格隔开的目录,它们在更新的时候会被Portage保护起来。
CONFIG_PROTECT_MASK 这个变量包含了一系列用空格隔开的目录,它们在更新的时候不会被Portage保护起来。

PATH:决定了shell将到哪些目录中寻找命令或程序
HOME:当前用户主目录
MAIL:是指当前用户的邮件存放目录。
SHELL:是指当前用户用的是哪种Shell。
HISTSIZE:是指保存历史命令记录的条数
LOGNAME:是指当前用户的登录名。
HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
PS1:是基本提示符,对于root用户是#,对于普通用户是$。
PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt :) ”。
# PS1=" Hello,My NewPrompt :) "

 

声明:本文档可以随意更改,但必须署名原作者

作者:凤凰舞者 qq:578989855

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言简单说】十:小结

([]!!) ㄟ(≥◇≤)ㄏ(&#xffe3;ε(#&#xffe3;) ∑( △ |||)︴ 一言不合发表情。。。 这节我们来做一个小菜单&#xff0c;然后判断我们选择的是啥东西&#xff0c;好了上代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {int a1;prin…

Android Studio开发基础之动态注册与注销BroadcastReceiver

1、New→Other→BroadcastReceiver package com.example.lhb.startservice;import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast;public class MyReceiver extends BroadcastReceiver {pu…

python每行输出5个数_python打印杨辉三角及输出第m行第k个数

1.打印杨辉三角及输出第m行第k个数1.计算到m行&#xff0c;打印出k项第m行有m项&#xff0c;m是正整数&#xff0c;因此k一定不会大于m&#xff0c;这个需求需要保存m行的数据&#xff0c;那么可以使用一个嵌套结构[[],[],[]]mint(input(行>>>))kint(input(第几个数&g…

无法识别的属性“targetFramework”。请注意属性名称区分大小写。

asp.net部署出错(targetFramework无法识别) 今天尝试着部署了一个基于Framework4.0的web项目&#xff0c;途中发生了一点小小的意外。报的错误是Web.Config配置文件中的 targetFramework属性无法识别。后来查了一下发现在站点中部署的Web使用的是基于.Net Framework2.0的Applic…

java解析xml生成表格_JAVA读取XML文件并解析 以及 JAVA生成文本文件输出

废话不多说&#xff0c;直接上代码及说明吧&#xff01;package Dao;import java.io.File;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import…

.NET点滴:说说Middleware构造中获取不到Scoped服务的问题

今天小桂问我&#xff1a;“为什么中间件的构造函数里不能使用scope的生命周期类型啊&#xff1f;”&#xff0c;那就用实例来得到答案吧&#xff0c;先看小桂说的情况&#xff0c;是报错的&#xff1a;var builder WebApplication.CreateBuilder(args);builder.Services.AddS…

模式识别之分类---数学贝叶斯方法

http://blog.sina.com.cn/s/blog_6163bdeb0102ehh1.html http://www.zdh1909.com/html/Verilog/29941.html

给定0~N之间的N个数字(大于等于0,小于N,不重复)进行按小到大排列(不用其它的经典排序算法)

1 问题 比如我们给定0~N之间的N个数字(大于等于0,小于N,并且不重复)进行按小到大排列,比如N是5,我们给定数据{3, 2, 1, 0, 4},我们按照从小到大的排名最后就是{0, 1, 2, 3, 4} 2 思路 我们遍历数组,下标为i,我们把i和a[i]进行对比,如果不想等我们就进行交换a[i]和a[a[i]]的值…

【C语言简单说】十一:switch 补

昨天丧心病狂的更新了十节。我都懵逼了。。。 *~ (&#xffe3;﹏&#xffe3;) ** 今天继续&#xff0c;来说一下。。。那个。。。另外一个分支switch。 直接上代码&#xff0c;学过了if的孩子就会觉得很简单的了&#xff1a; #include<stdio.h> #include<stdlib.h…

retain、strong、weak、assign区别

1. 假设你用malloc分配了一块内存&#xff0c;并且把它的地址赋值给了指针a&#xff0c;后来你希望指针b也共享这块内存&#xff0c;于是你又把a赋值给&#xff08;assign&#xff09;了b。此时a 和b指向同一块内存&#xff0c;请问当a不再需要这块内存&#xff0c;能否直接释放…

Java游戏有易筋经_当年武侠游戏中绝世秘籍易筋经!重置游戏几十次,玩家才终于找到?...

原标题&#xff1a;当年武侠游戏中绝世秘籍易筋经&#xff01;重置游戏几十次&#xff0c;玩家才终于找到&#xff1f;在金庸的笔下产生过诸多绝世武学&#xff0c;其中最常被人提及的莫过于少林绝学易筋经。这部由达摩祖师于嵩山少林寺面壁9年留下的武学经书&#xff0c;亦是武…

python路径怎么找windows_如何查看 windows 中 Python安装路径

答疑 qq&#xff1a;3081655843公号&#xff1a; 天枢子python课堂windows平台如果python已经安装好了的话&#xff0c;打开命令行窗口&#xff0c;输入python命令回车&#xff0c;能够进入到python的命令行界面。这个时候我们能够确定的就是&#xff0c;python的安装路径一定被…

微软是如何解决 PC 端程序多开问题的——内部实现

前言上次&#xff0c;我们通过《引用 Microsoft.VisualBasic 解决程序多开的问题》。虽然它非常简单&#xff0c;但是仅适用于 WinForm 应用程序&#xff0c;而且还需要引用不常用的Microsoft.VisualBasic类库。因此&#xff0c;我们决定深挖一下&#xff0c;看看具体是如何实现…

C#常用命名空间

MSDN上的C#.NET Framework类库文档目录树&#xff0c;本人觉得有点不得要领&#xff0c;于是参考搜到的结果简单整理如下&#xff1a; 一、基础命名空间 System 处理内建数据、数学计算、随机数的产生、环境变量、垃圾回收器及一些常见的异常和特征. System.Collections 包含了…

svn之回滚到指定版本

1 问题 我们用svn下载了最新的代码&#xff0c;但是我们需要回退到制定的版本 2 操作 我们先svn showlog 找到对应的版本号 如果用的是svn图形界面客户端 我们点击关联svn项目的鼠标右键&#xff0c;然后有个update to reversion 写上相应的版本即可

番茄工作法—《可以量化的管理学》

6.5.4时间t与番茄工作法 内容提要&#xff1a;番茄工作法划分工作和休息时间&#xff0c;将时间划分为小块&#xff0c;有利于提高工作和休息的效率&#xff0c;提高时间的感知和掌控。 番茄工作法是简单易行的时间管理方法&#xff0c;是由弗朗西斯科西里洛于1992年创立的一种…

【C语言简单说】十二:逻辑运算符

**总觉得今天更两节就好了。 (&#xffe3;.&#xffe3;) ** 困。。。(&#xffe3;.&#xffe3;) \ 今天我们来加深if的使用&#xff0c;我们来讲解运算符&&和||&#xff0c;一个叫做 与&& 一个叫做 或&&&#xff1b;我们先来说 && 我们…

C#遍历一个文件夹下的所有可执行文件

using System; using System.IO;namespace IO操作 {class Program{static void Main(string[] args){Console.WriteLine(File.Exists("C:\IO.txt"));Console.WriteLine(Directory.Exists("C:\"));Console.WriteLine();//获取一个路径下所有可执行文件&…

linux c之把最简单的字符串数据追加写入文件

1 问题 把最简单的字符串数据追加写入文件 2 代码实现 #include <stdio.h> #include <string.h>void write_data_to_file(const char *path, char *str) {FILE *fd fopen(path, "a");if (fd NULL) {printf("fd is NULL and open file fail\n&qu…

Android Json 解析

方法一 使用API解析 json&#xff1a; {"beaconid":"2397","state":"01","userid":"90"} 获取json的方法 private void sendRequestWithHttpClient(){new Thread(new Runnable() {Overridepublic void run() {try…