【问题标题】:How to understand the following shell script?如何理解下面的shell脚本?
【发布时间】:2023-03-16 06:23:02
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你忘了 Python 了吗?
  • 这不是 Python 代码。
  • 也许我弄错了,它是一个 shell 脚本,但问题仍然存在。如果您有任何关于我应该在哪里了解此语法的信息。抱歉我的误解
  • 如果您也可以编辑我的标题会更好,以免混淆用户

标签: shell


【解决方案1】:

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

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

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

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

这两个列出的 shell 脚本的来源,推测与被调用的脚本存储在同一目录中。

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

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

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

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

【讨论】:

  • 非常感谢!所以我想这就是我整天阅读python的原因,我找不到任何能让我理解它的东西。
【解决方案2】:

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

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

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

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

如果您的脚本位于:

/foo/bar/baz/xxx.sh

上面的行是cd /foo/bar/baz

文件:

environment.sh
readParams.sh

xxx.sh在同一目录中

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多