查看环境变量

  1. export

设置环境变量

临时环境变量

  1. export a=b

取消临时变量

删除临时变量.

  1. export -n a

永久环境变量

环境变量作用域

环境变量对当前用户生效

写入用户主目录的 ~/.bashrc~/.bash_profile

环境变量对所有用户生效

修改 /etc/profile

unset 取消环境变量

unset 能够删除已经定义的环境变量和函数。-f 只删除函数,-v 只删除变量。
在 shell 脚本中,可以使用此命令来回收没用的临时变量,如数组 …

  1. unset GOPROXY

常见的环境变量

PATH

PATH 表示全局路径

CDPATH

cd 命令的查找顺序
当cd命令在当前目录中找不到你指定的文件/目录时,会自动到CDPATH中的目录中寻找。

使用场景

可以在环境变量CDPATH中加入你常用的工作目录,
比如说我常去家目录,也常去/var/log目录找日志,可以执行如下命令:

  1. $ export CDPATH='~:/var/log'
  2. # cd 命令将会在 ~ 目录和 /var/log 目录扩展搜索
  3. $ pwd
  4. /home/labuladong/musics
  5. $ cd mysql
  6. cd /var/log/mysql
  7. $ pwd
  8. /var/log/mysql
  9. $ cd my_pictures
  10. cd /home/labuladong/my_pictures

这个技巧是十分好用的,这样就免了经常写完整的路径名称,节约不少时间。
需要注意的是,以上操作是 bash 支持的,其他主流 shell 解释器当然都支持扩展cd命令的搜索目录,但可能不是修改CDPATH这个变量,具体的设置方法可以自行搜索。

扩展知识-其他路径简写

cd -返回刚才待的目录,直接看例子吧:

  1. $ pwd
  2. /very/long/path
  3. $ cd # 回到家目录瞅瞅
  4. $ pwd
  5. /home/labuladong
  6. $ cd - # 再返回刚才那个目录
  7. $ pwd
  8. /very/long/path

特殊命令!$会替换成上一次命令最后的路径,直接看例子:

  1. # 没有加可执行权限
  2. $ /usr/bin/script.sh
  3. zsh: permission denied: /usr/bin/script.sh
  4. $ chmod +x !$
  5. chmod +x /usr/bin/script.sh


特殊命令!*会替换成上一次命令输入的所有文件路径**,直接看例子:

  1. # 创建了三个脚本文件
  2. $ file script1.sh script2.sh script3.sh
  3. # 给它们全部加上可执行权限
  4. $ chmod +x !*
  5. chmod +x script1.sh script2.sh script3.sh

alias

alias格式:alias name text
在text中要得到用户传递的参数可以使用以下方式
/!:1 表示第1个参数
/!:2 表示第2个及余下的所有参数
/!
表示所有参数
如:alias test_val ‘@ z = (/!*) ;echo $z’
test_var 1 + 1
得到2

修改 alias

修改 alias 后需要重启 shell
https://www.zhihu.com/question/23137414
由于 alias 的优先级比较高,所以如果与当前某 alias 重名,在不重启当前 shell 的情况下,需要 unalias 旧名字。
也就是当用 alias 定义了一个别名,有毛病,然后写了一个同名函数。如果不重启shell,在shell 中会依然认为是 linux 别名。

alias 传递参数

命令的别名无法直接接受参数, 无效命令举例:

  1. # 把 $1 加一个 @bak 后缀
  2. mv $1 $1@bak

可以把对应的命令变成一个函数,

写成一行字符串函数

要点:

  • func(){ mv 要有空格;
  • 注意使用 ; 分行.
  • 最后的 func 表示调用.
  1. alias bak='func(){ mv $1 $1@bak; }; func'

直接在 .bash 中定义函数

  1. # 命名为 _bak 是为了避免和 bak 冲突.
  2. function _bak(){
  3. mv $1 $1@bak
  4. }
  5. alias bak=_bak