如何理解以下shell脚本?

str*_*tis 0 shell

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

[ -n "${0%/*}" ] && cd ${0%/*}
. ./environment.sh
. ./readParams.sh
Run Code Online (Sandbox Code Playgroud)

我知道这个脚本是从./enviroment.sh和读取的./readparams.sh

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

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

Sha*_*hin 5

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

[ -n "${0%/*}" ] && cd ${0%/*}
Run Code Online (Sandbox Code Playgroud)

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

. ./environment.sh
. ./readParams.sh
Run Code Online (Sandbox Code Playgroud)

这会导致两个列出的shell脚本,可能存储在与被调用脚本相同的目录中.

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

[ -n "${0%/*}" ]转换为"if "${0%/*}"结果为非空字符串".

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

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