Shell特殊扩展变量

我们可以man bash 命令,然后搜索"Parameter Expansion"来查找相关的内容帮助

  • ${parameter:-word}       如果parameter的变量值为空或没赋值,则返回word字符串并代替变量的值(变量没定义,返回备用的值,防止变量为空或没定义报错)
  • ${parameter:=word}      如果parameter的变量值为空或没赋值,。。。同上,(变量没定义为防止出错,找的备胎变量)
  • ${parameter:?word}      如果parameter的变量值为空或者没赋值,word字符串就作为标准错误输出,否则出书变量的值(捕捉由于变量未定义导致的错误,并退出)
  • ${parameter:+word}      若果parameter的变量值为空或者未赋值,则什么都不做,否则word字符串将代替变量的值。

${parameter:-word}用法距离:没有赋值的情况

1 [root@king tmp]# echo $test      #变量未设置,所以输出时为空。
2 [root@king tmp]# result=${test:-UNSET}       #<==若test没值,则返回UNSET。
3 [root@king tmp]# echo $result    #打印result变量,返回UNSET,因为test没有赋值。
4 UNSET
5 [root@king tmp]# echo ${test}    #注意,此时打印test变量还是为空。
结论:对于${test:-UNSET},当test变量没值时,就返回变量结尾设置的UNSET字符串。
赋值的情况
1 [root@king tmp]# test=hello  #赋值hello字符串。
2 [root@king tmp]# echo $test
3 hello
4 [root@king tmp]# result=${test:-UNSET}              
5 [root@king tmp]# echo $result  #因为test已赋值,因此,打印result就输出了test的值hello,而不是原来的UNSET。
6 hello
7 [root@king tmp]# result=${test-UNSET}               #定义时忽略了冒号。
8 [root@king tmp]# echo $result
9 hello                                               #打印结果和带冒号时没有变化。

${parameter:=word}和${parameter:-word}差不多,理解都是一样的,变量为赋值就把备胎给变量。。。

${parameter:?word}变量为赋值或空,就将该字符串(word)作为标准错误输出。

 1 [root@king tmp]# echo ${key:? not defined}   #key变量没有定义,因此,把“not defined”作为标准错误输出。
 2 -bash: key: not defined       #错误提示,只不过是事先定义好的错误输出。
 3 [root@king tmp]# echo ${key? not defined}     #去掉冒号定义,并输出,结果一致。
 4 -bash: key: not defined
 5 [root@king tmp]# key=5 #<==给变量赋值1。
 6 [root@king tmp]# echo ${key:? not defined}    #因为key有值了,所以,打印key的值。
 7 5
 8 [root@king tmp]# echo ${key? not defined}     #去掉冒号定义,并输出,结果一致。
 9 5
10 [root@king tmp]# unset key     #取消key的定义。
11 [root@king tmp]# echo ${key:? not defined}
12 -bash: key: not defined           #又打印错误提示了。

${parameter:+word}变量为空或没赋值,什么都不做,否则用word字符串替换变量的值

1 [root@king tmp]# key=${value:+word}      #value变量未定义。
2 [root@king tmp]# echo $key        #因为value变量未定义,所以打印key变量为空。
3 [root@king tmp]# value=25           #value变量赋值为25。
4 [root@king tmp]# key=${value:+word} #注意,这里一定要重新定义key。
5 [root@king tmp]# echo $key
6  word                           #因为value变量有值,所以打印key变量输出为“:+ ”后面的内容。

Linux是一个多用户多任务的操作系统,可以在Linux中为不同的用户设置不同的运行环境,具体做法是设置不同用户的环境变量。

Linux环境变量分类

一、按照生命周期来分,Linux环境变量可以分为两类: 1、永久的:需要用户修改相关的配置文件,变量永久生效。 2、临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。

二、按照作用域来分,Linux环境变量可以分为: 1、系统环境变量:系统环境变量对该系统中所有用户都有效。 2、用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。

Linux设置环境变量的方法

一、在/etc/profile文件中添加变量 对所有用户生效(永久的) 用vim在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。 例如:编辑/etc/profile文件,添加CLASSPATH变量

vim /etc/profile  
  
export JAVA_HOME=/home/jenkins/globalEnvi/jdk1.8.0_191 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

注:修改文件后要想马上生效还要运行source /etc/profile不然只能在下次重进此用户时生效。 二、在用户目录下的.bash_profile文件中增加变量 【对单一用户生效(永久的)】vim ~/.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

vim ~/.bash.profile


export JAVA_HOME=/home/jenkins/globalEnvi/jdk1.8.0_191 
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

注:修改文件后要想马上生效还要运行source ~/.bash_profile不然只能在下次重进此用户时生效。 三、直接运行export命令定义变量 【只对当前shell(BASH)有效(临时的)】 在shell的命令行下直接使用export 变量名=变量值 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

Linux环境变量使用

一、Linux中常见的环境变量有:

  • PATH:指定命令的搜索路径

PATH声明用法: PATH=$PAHT:<PATH 1>:<PATH 2>:<PATH 3>:--------:< PATH n > export PATH 你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效。 可以利用echo $PATH查看当前当前系统PATH路径。

  • HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
  • HISTSIZE:指保存历史命令记录的条数。
  • LOGNAME:指当前用户的登录名。
  • HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的
  • SHELL:指当前用户用的是哪种Shell。
  • LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
  • MAIL:指当前用户的邮件存放目录。

注意:上述变量的名字并不固定,如HOSTNAME在某些Linux系统中可能设置成HOST

二、Linux也提供了修改和查看环境变量的命令,下面通过几个实例来说明:

  • echo 显示某个环境变量值 echo $PATH
  • export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
  • env 显示所有环境变量
  • set 显示本地定义的shell变量
  • unset 清除环境变量 unset HELLO
  • readonly 设置只读环境变量 readonly HELLO

 

  • 配置gpu版本的库

linux下配置tensorflow

如何在Ubuntu16.04上安装CuDNN?

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐