shell 脚本中的 ${0%/*} 起什么作用?

shell 脚本中的 ${0%/*} 起什么作用?

抱歉,这是一个愚蠢的问题,但我搜索过但没有成功。

第二行具体起什么作用?:

#!/bin/sh
cd ${0%/*} || exit 1

我知道第一个是事儿,第二个试图改变目录,但令人困惑的部分是${0%/*}

你能解释一下第二行吗?

答案1

${0}是脚本的第一个参数,即脚本名称或路径。如果您以 启动脚本path/to/script.sh${0}则将恰好是该字符串:path/to/script.sh

部分%/*修改 的值${0}。其含义是:取出所有字符直到/后面跟一个文件名。在上面的例子中,${0%/*}将是path/to

你可以在 shell 上看到它的实际运行:

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Sh 支持许多其他类型的“参数替换”。例如,下面是如何采用文件名而不是路径:

$ echo "${x##*/}"
script.sh

一般来说,%%%会去除后缀,而###会去除前缀。您可以阅读更多关于参数替换

相关内容