0

如果有人可以向我解释这部分代码的作用,我会很高兴

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

我知道这个脚本是从./enviroment.sh./readparams.sh

但我真的很难理解第一行代码的作用。所以我可以理解之后的整个过程。

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

4

2 回答 2

5

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

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

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

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

这提供了两个列出的 shell 脚本,可能存储在与被调用脚本相同的目录中。

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

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

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

ps 我不相信这是实现这一目标的最佳方法,但这几乎就是它的作用。就个人而言,我会选择更具可读性cd $(dirname "$0")或更强大的解决方案,请参阅从内部获取 Bash 脚本的源目录

于 2013-05-16T12:19:43.907 回答
1

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

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

它使用了参数扩展,你可以 man bash 看到它。

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

如果您的脚本位于:

/foo/bar/baz/xxx.sh

上面的行确实cd /foo/bar/baz

文件:

environment.sh
readParams.sh

在同一目录中xxx.sh

于 2013-05-16T12:20:13.430 回答