我对这个条件感到困惑:
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'
答案 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 test
或help 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存储库状态的详细信息。