对不起,如果这是一个愚蠢的问题,但我没有成功搜索它。
第二行到底是做什么的?:
#!/bin/sh
cd ${0%/*} || exit 1
Run Code Online (Sandbox Code Playgroud)
我知道第一个是shebang,第二个尝试更改目录,但令人困惑的部分是${0%/*}.
你能解释一下第二行吗?
And*_*ini 30
${0}是脚本的第一个参数,即脚本名称或路径。如果您将脚本作为 启动path/to/script.sh,${0}则将正是该字符串:path/to/script.sh。
该%/*部分修改 的值${0}。这意味着:取所有字符直到/后跟文件名。在上面的例子中,${0%/*}将是path/to.
您可以在 shell 上看到它的运行情况:
$ x=path/to/script.sh
$ echo "${x%/*}"
path/to
Run Code Online (Sandbox Code Playgroud)
Sh 支持许多其他类型的“参数替换”。例如,这里是如何使用文件名而不是路径:
$ echo "${x##*/}"
script.sh
Run Code Online (Sandbox Code Playgroud)
一般来说,%和%%strip后缀,while#和##strip前缀。您可以阅读有关参数替换的更多信息。