这些bash_profile函数在做什么?

时间:2016-03-08 06:15:10

标签: bash shell .bash-profile

我对这个条件感到困惑:

 if [[ ! -z "$1" ]] 

这是什么语言?

以下是我对终端和bash_profile所熟悉的内容:

  

Bash是GNU的shell或命令语言解释器   操作系统。

  

简单地说,shell是一个从你的命令中获取命令的程序   键盘并将它们提供给操作系统来执行。在旧   几天,它是Unix计算机上唯一可用的用户界面。   如今,我们还有图形用户界面(GUI)   命令行界面(CLI),例如shell。

     

在大多数Linux系统上都有一个名为bash的程序(代表Bourne   再次SHell,原始Bourne shell程序的增强版本,   sh,由Steve Bourne编写)作为shell程序。

function parse_git_branch {
    branch=`git rev-parse --abbrev-ref HEAD 2>/dev/null`
    if [ "HEAD" = "$branch" ]; then
      echo "(no branch)"
    else
      echo "$branch"
    fi
  }

  function prompt_segment {
    # for colours: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors
    # change the 37 to change the foreground
    # change the 45 to change the background
    if [[ ! -z "$1" ]]; then
      echo "\[\033[${2:-37};45m\]${1}\[\033[0m\]"
    fi
  }

  function build_mah_prompt {
    # time
    ps1="$(prompt_segment " \@ ")"

    # cwd
    ps1="${ps1} $(prompt_segment " \w ")"

    # git branch
    git_branch=`parse_git_branch`
    if [[ ! -z "$git_branch" ]]
    then
      ps1="${ps1} $(prompt_segment " $git_branch " 32)"
    fi

    # next line
    ps1="${ps1}\n\$ "

    # set prompt output
    PS1="$ps1"
  }

  PROMPT_COMMAND='build_mah_prompt'

1 个答案:

答案 0 :(得分:2)

语言是Bash,一个基于旧Bourne shell的现代shell (大部分)与POSIX standards兼容。

测试又名[

[[test命令的Bash扩展名,也称为[test命令是一个单独的可执行文件,但由于它对shell编程非常有用,因此大多数(如果不是全部)现代shell将它作为shell内置实现。以下命令显示两个版本在许多系统上都可用:

$ type -a test
test is a shell builtin
test is /usr/bin/test

$ type -a [
[ is a shell builtin
[ is /usr/bin/[

有关详细信息,请参阅man testhelp test(使用Bash)。

[[

[[实现为Bash关键字(不是外部命令)。它最初来自Korn shell并且工作方式类似,但与原始[命令相比有许多改进。有关详细信息,请参阅以下内容:

具体示例

根据man test(POSIX规范)

  

−z string如果字符串的长度为零,则为真;否则,错误。

因此,[[ -z "$1" ]]构造返回0(Unix shell中True的值)if $1,脚本或函数的第一个位置参数是空字符串。引入否定!运算符将表达式转换为其布尔对,即False,如果以下表达式求值为True,反之亦然。

总而言之,如果函数的第一个参数是非空字符串,则整个表达式的计算结果为True,如果它是空的(或者可能根本没有设置),则表达式False

如果您阅读了上述链接,您会注意到[[ ! -z "$1" ]]实际上等同于[[ -n "$1" ]],如果True包含任何内容,则返回$1,即不是空的。这可以进一步缩短为[[ $1 ]],因为[[中的变量不需要引号。

注意:可移植版本(对于POSIX shell)是[ -n "$1" ][ "$1" ](必须引用变量以防止路径名扩展,分词和其他潜在的副作用)。有关详细信息,请参阅http://mywiki.wooledge.org/Quotes

功能

剩下的代码是shell函数,看起来它们用于构建一个彩色提示符,如果当前工作目录受版本控制,它将提供git存储库状态的详细信息。