linux终端命令里的美元符号$究竟有啥玄机

2018-04-22  本文已影响728人  nextliving

程序员经常要在终端(Terminal)执行指令,其中经常出现的一个字符就是美元符号(dollar sign):$。相信很多人会感觉困惑,这玩意到底是啥?不要急,本文将为你揭开谜底。

shell prompt末尾的$

每次打开一个终端,首先印入眼帘的是大概这样的一行代码:


Last login: Tue Jun 7 18:38:30 on ttys000

MacBookPro:~ chenxin$

先解释一下以上代码的含义,第一行没特别之处,略过。第二行中MacbookPro是主机名,不同的人主机名不一样,对应的显示也不一样。表示当前操作路径是当前登陆用户的根目录。chenxin表示当前操作计算机的登陆用户名。关键是结尾的美元符号"$",它出现在这个位置表示终端等待用户输入命令。"MacBookPro: chenxin$"这样以主机名开始,以"$"结束的一行叫做shell prompt,对应的shell版本是 Bourne shell (比如 POSIX shell, Korn shell或者 Bash)。如果shell prompt以%结束(比如"MacBookPro:~ chenxin%"),对应的shell版本是C shell(csh或者tcsh)。如果shell prompt以#结束(比如"MacBookPro:~ chenxin#"),表示正在以超级用户(mac下输入sudo su进入超级用户)身份运行当前的shell。另外,在网上看别人的技术文章,经常看到类似于这样的代码片段:


$nvm install v5.11.0

$nvm use v5.11.0

$nvm alias default v5.11.0 

每行代码均以"$"开始,所以,以"$"开头贴出代码片段是暗示读者该代码是在终端中执行的,而"$"之前的shell prompt部分通常省略掉(主要是主机名和用户名,贴出来没任何意义)。

命令中的$

出现在命令中的"$"表示“扩展(expand)”,也有其它说法比如dereferencing(姑且翻译为逆引用吧),有点类似于C语言中对一个指针取地址的运算符"*"。比如笔者主机的环境变量HOME对应的路径是/Users/chenxin,当笔者键入以下命令:

$echo $HOME

或者

$echo ${HOME}

输出的结果都是

/Users/chenxin

可以看到,"$"相当于取出了HOME所指代的真实路径,就像"*"取出了指针所指向的真实地址。我们可以给HOME赋任意的值,所以

$echo $HOME

理论上可以打印输出任意的值假如没有这个运算符,也就没有必要让HOME指代/Users/chenxin这个路径了,因为我们根本没有能够解析HOME真实值的方法,是"$"让HOME有了生命力,,我想这就是"$"有"expand"含义的由来。

"$"后紧跟变量variable可以这么写

$echo $variable

或者

$echo ${variable}

如果是一个命令(command)呢?这么写

$echo $(command)

显然"$"可以把命令(command)的执行结果取出来。

参考

上一篇下一篇

猜你喜欢

热点阅读