如何理解以下shell脚本?

时间:2013-05-16 12:11:54

标签: shell

如果有人能解释我代码的这部分内容,我会很高兴

[ -n "${0%/*}" ] && cd ${0%/*}
. ./environment.sh
. ./readParams.sh

我了解此脚本正在阅读./enviroment.sh./readparams.sh

但我真的很难理解代码的第一行是什么。所以我可以理解这之后的整个过程。

如果你能给我一个网站或任何能帮助我理解这种语法的东西,我会很高兴的。我是shell脚本的初学者,所以感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

这是一个shell脚本,而不是python。

[ -n "${0%/*}" ] && cd ${0%/*}

将当前工作目录更改为shell脚本所在的目录。

. ./environment.sh
. ./readParams.sh

这是两个列出的shell脚本的源代码,可以存储在与被调用脚本相同的目录中。

要分解第一行,$0将包含命令的第一个参数,即被调用的脚本。 ${0%/*}执行parameter substitution删除尾随部分(从上一个/开始),这样就可以有效地为您提供目录名称。

[ -n "${0%/*}" ]转换为“如果"${0%/*}"导致字符串非空”。

整行因此转换为“如果执行的脚本以路径为前缀,则cd为该目录”。

P.S。我不相信这是实现这一目标的最佳方式,但这几乎就是它的作用。就个人而言,我会选择更具可读性的cd $(dirname "$0"),或者对于更强大的解决方案,请参阅Getting the source directory of a Bash script from within

答案 1 :(得分:1)

首先,这根本不是python,甚至不是关闭!

[ -n "${0%/*}" ] && cd ${0%/*}

它使用参数扩展,你可以用bash来看它。

基本上,它是脚本所在目录的cd。例如:

如果您的脚本位于:

/foo/bar/baz/xxx.sh

以上行cd /foo/bar/baz

文件:

environment.sh
readParams.sh

位于xxx.sh

的同一目录中