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

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

作者: nextliving | 来源:发表于2018-04-22 13:09 被阅读728次

    程序员经常要在终端(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)的执行结果取出来。

    参考

    相关文章

      网友评论

          本文标题:linux终端命令里的美元符号$究竟有啥玄机

          本文链接:https://www.haomeiwen.com/subject/fbzqlftx.html