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 |
- 所以,它是aa的dirname($0)。
- 在这个脚本中,是的,它的工作方式与dirname"$0"类似,但它可能会导致问题。如果您这样调用脚本:bash script,那么${0/*}不会给您提供路径,它会返回脚本名,或者如果您指定了完整路径(/path/to/script),它不会返回任何内容,因此它不能保证在所有情况下都能按预期工作。
- 我正忙着在superuser上输入一个关于这行的问题,我在我的问题中写道,我通常会在google中输入部分代码以获得结果,但我似乎忘记了这一点,但当我在发布前分解并分析了我的问题后,我就在google上搜索了${0%}并登陆了这里,你已经为我澄清了:)