抱歉,这是一个愚蠢的问题,但我搜索过但没有成功。
第二行具体起什么作用?:
#!/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
一般来说,%
和%%
会去除后缀,而#
和##
会去除前缀。您可以阅读更多关于参数替换。