2012-12-20 51 views
10

我看的virtualenv的源代码,并激活脚本包含以下代码:if [[x]!= x]在bash中做什么?

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1"  
    if [ "x" != x ] ; then 
     PS1="$PS1" 
    else 
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
     # special case for Aspen magic directories 
     # see http://www.zetadev.com/software/aspen/ 
     PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
    else 
     PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
    fi 
    fi 
    export PS1 
fi 

是什么行​​吗? x在脚本的其他地方没有定义。

回答

10

在Bash中,该测试保证失败; [ "x" != x ]总是返回非零退出状态(即“假”),因为"x"x都是由单个字符x组成的字符串。 (引号真的没有在这种情况下,任何影响。)

更重要的是,该命令PS1="$PS1"并没有真正做任何事情,无论是:它只是将变量PS1等于它已经拥有的价值。

我猜这个脚本是以某种方式自动生成的,而且在某些系统上,这些语句看起来有点不同,并且没有什么用处。

+3

它看起来像旧的'[“x $ foo”!= x]'用来检查旧壳上的空字符串。 –

+0

这正是发生了什么事。该脚本是自动生成的,有时候会有一个变量在那里被拼接。见[this](https://github.com/pypa/virtualenv/blob/develop/virtualenv_embedded/activate.sh#L59)和[this](https://github.com/pypa/virtualenv/blob/develop/) virtualenv.py#L1582)。谢谢! –

+0

@AKaptur:不客气! – ruakh

相关问题