相关阅读Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482在Linux中内建命令alias用于为一串字符设置别名这串字符通常是一条命令或一组命令。当Bash读取并解析一行命令时如果发现某个位置上的单词是别名就会在执行前先进行别名展开。简单来说alias的作用就是用一个更短、更顺手的名字代替原本较长的命令。下面是该命令的语法与选项的解释。用法 alias [-p] ([name[value]])* 选项 -p 指定该选项会打印出当前进程的所有别名很多Linux发行版都会预先设置一些默认别名这些别名通常是在Bash配置文件中定义的。如果直接执行alias而不附带name参数那么效果与使用alias -p基本相同都会打印出当前进程中的所有别名。顺带一提如果想删除别名可以使用unalias命令。例如[***EDA ~]$ alias alias dcdc_shell alias dvdesign_vision alias egrepegrep --colorauto alias fgrepfgrep --colorauto alias fmformality alias grepgrep --colorauto alias l.ls -d .* --colorauto alias llls -l --colorauto alias lmd lmdown -c /opt/Synopsys/SCL_2018/scl/2018.06/admin/license/license.dat alias lmg lmgrd -c /opt/Synopsys/SCL_2018/scl/2018.06/admin/license/license.dat -l /opt/Synopsys-2018/SCL_2018/scl/2018.06/admin/logs/debug.log alias lsls --colorauto alias ptprimetime alias starrcStarXtract alias vivim alias whichalias | /usr/bin/which --tty-only --read-alias --show-dot --show-tildeBash在读取并解析一行命令时会检查这条命令的第一个单词(word)是否是别名。如果是就先进行别名替换。这里有一个很重要的特点别名替换发生得非常早是在Bash读取整行命令之后、真正执行命令之前完成的。也正因为如此在同一行里刚刚定义的别名通常不能立刻在这一行后面直接使用。例如[***EDA ~]$ alias aaecho 1;aa bash: aa: command not found... [***EDA ~]$ alias alias aaecho 1 alias dcdc_shell alias dvdesign_vision ***** [***EDA ~]$ aa 1别名替换与变量替换是两回事而且发生的时机也不同。变量替换发生在命令执行前但通常晚于别名替换。例如[***EDA ~]$ a1;echo $a 1如果某个别名的值在末尾保留了一个空格那么在Bash继续解析这条命令时该别名后面的下一个单词也会继续被检测是否为别名。例如[***EDA ~]$ alias bbecho 2 # value中留有空格 [***EDA ~]$ alias cc3 # value中留有空格 [***EDA ~]$ alias alias aaecho 1 alias bbecho 2 # 注意末尾有空格 alias cc3 alias dcdc_shell alias dvdesign_vision ***** [***EDA ~]$ bb cc # bb和cc都会被检测是否是别名被替换成echo 2 3 2 3别名和环境变量不同。环境变量可以被子进程继承而别名通常不能被子进程继承。因此如果想长期使用某个别名一般需要把它写到Bash配置文件中。例如[***EDA ~]$ alias dddecho This is alias in Bash # 在当前进程创建一个别名 [***EDA ~]$ ddd This is alias in Bash [***EDA ~]$ bash # 在当前进程运行另一个bash子进程 [***EDA ~]$ ddd # 无法使用别名替换 bash: ddd: command not found... Similar command is: dd [***EDA ~]$ exit # 回到一开始的bash进程 [***EDA ~]$ ddd # 可以使用别名 This is alias in Bash别名替换还有一个特点它不会无限递归展开。也就是说某个别名被展开之后展开得到的内容不会再次被无休止地继续当作别名进行递归替换。例如[***EDA ~]$ alias echoecho 1 # 别名替换值中又有别名 [***EDA ~]$ echo # 不会递归替换 1在交互式Shell中别名替换默认是开启的但在非交互式Bash脚本中别名展开默认是关闭的。除非在脚本中使用shopt命令开启expand_aliases选项。例如scripts文件 #!/bin/bash #未启用别名展开 #shopt -s expand_aliases alias ttecho 111 # 定义别名 tt # 使用别名 [***EDA ~]$ ./scripts ./script: line 8: tt: command not found scripts文件 #!/bin/bash #启用别名展开 shopt -s expand_aliases alias ttecho 111 # 定义别名 tt # 使用别名 [***EDA ~]$ ./scripts 111有时我们定义了某个别名但在特定场景下又不希望它被替换。这时可以用下面几种方式绕过别名展开。1、使用反斜杠转义命令的任意一个字符\aa # 不会执行别名替换 a\a # 不会执行别名替换2、使用单引号或双引号aa # 不会执行别名替换 aa # 不会执行别名替换3、使用command内建命令command aa4、使用完整命令路径/home/***/aa由于别名只对当前Shell会话有效而且不能自然传递到新的Shell进程中因此如果想长期使用某个别名通常应该把它写入配置文件例如.bashrc。因为.bashrc的内容会在Bash启动后被读取并执行所以把常用别名写进去后每次打开新的Bash时都会自动生效。alias是Bash中一个非常实用的内建命令它的主要作用是为一串字符设置别名从而减少输入量、提高命令行使用效率。本文涉及的几个重点可以概括如下alias用于定义别名alias -p可打印当前所有别名别名替换发生在Bash读取并解析命令时早于变量替换同一行中刚定义的别名通常不能立刻在该行后面使用若别名值末尾带空格后一个单词也会继续检查是否为别名别名不能像环境变量那样被子进程继承非交互式Bash脚本中默认关闭别名展开需要用shopt -s expand_aliases手动开启可以通过反斜杠、引号、command或完整路径绕过别名替换。