bash脚本中的$ {0%/ *}是什么意思?


73

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

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

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

Answers:


108

它被称为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

3
所以,这是一个dirname($0)
jm666 2011年

8
在此脚本中,是的,它的工作原理类似,dirname "$0"但可能会引起问题。如果你这样调用脚本:bash script然后${0/*}不给你的路径,它返回脚本名称,或者如果你指定的完整路径(/路径/到/脚本)它没有返回,从而有望在所有它不保证工作情况。
c00kiemon5ter 2011年

我正忙于在超级用户中输入有关此行的问题,我在问题中写道,通常我会将部分代码键入google以获取结果,但似乎我忘记了这一点,但是当我分解问题时并在发布之前对其进行了分析,我${0%}
谷歌上

另请参阅“从脚本本身获取Bash脚本的源目录” stackoverflow.com/questions/59895/…–
MarcH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.