我试图了解一个测试脚本,其中包括以下部分:
SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then
cd $SCRIPT_PATH
fi
代表什么${0%/*}
?谢谢
Answers:
它被称为Parameter Expansion
。查看此页面以及该网站的其余部分。
这${0%/*}
是什么,它会从参数0/*
的末尾删除字符串后缀,从而扩展参数0(称为脚本的路径)中包含的值。
因此,$0
与${0}
其他参数一样,例如。$1
您可以将其写为${1}
。正如我所说的$0
那样,它很特别,因为它不是一个真实的参数,它始终存在并且代表脚本的名称。参数扩展在{
}
花括号内起作用,并且%
是参数扩展的一种类型。
%/*
匹配最后一个出现的字符,/
并删除*
该字符之后的所有内容(表示任何内容)。看一个简单的例子:
$ var="foo/bar/baz"
$ echo "$var"
foo/bar/baz
$ echo "${var}"
foo/bar/baz
$ echo "${var%/*}"
foo/bar
dirname "$0"
但可能会引起问题。如果你这样调用脚本:bash script
然后${0/*}
不给你的路径,它返回脚本名称,或者如果你指定的完整路径(/路径/到/脚本)它没有返回,从而有望在所有它不保证工作情况。
${0%}
在
dirname($0)