关于脚本:bash脚本中$ {0%/ *}的含义是什么?

What is the meaning of ${0%/*} in a bash script?

我试图理解一个测试脚本,其中包括以下部分:

1
2
3
4
SCRIPT_PATH=${0%/*}
if ["$0" !="$SCRIPT_PATH" ] && ["$SCRIPT_PATH" !="" ]; then
    cd $SCRIPT_PATH
fi

${0%/*}代表什么?谢谢


它叫Parameter Expansion。看看这个页面和网站的其他部分。

${0%/*}所做的是,在从参数0(即调用脚本的路径)的末尾删除字符串/*后缀后,扩展参数0中包含的值。

因此,$0${0}是相同的,这与其他任何论证一样,如$1,你可以把它写成${1}。正如我所说,$0是特殊的,因为它不是真正的论点,它总是存在的,代表脚本的名称。参数扩展在{}大括号内工作,%是参数扩展的一种类型。

%/*匹配/的最后一次出现,并删除该字符之后的任何内容(*表示任何内容)。看看这个简单的例子:

1
2
3
4
5
6
7
$ var="foo/bar/baz"
$ echo"$var"
foo/bar/baz
$ echo"${var}"
foo/bar/baz
$ echo"${var%/*}"
foo/bar