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

use*_*099 62 bash scripting

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

SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then 
    cd $SCRIPT_PATH
fi
Run Code Online (Sandbox Code Playgroud)

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

c00*_*ter 94

它被称为Parameter Expansion.看一下这个页面和网站的其余部分.

${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
Run Code Online (Sandbox Code Playgroud)

  • 在这个脚本中,是的,它就像`dirname"$ 0"`但它可能会导致问题.如果你这样调用脚本:`bash script`然后`$ {0/*}`没有给你路径,它返回脚本名,或者如果你指定了完整路径(_/path/to/script_)它什么都不返回,所以不保证在所有情况下都能按预期工作. (6认同)
  • 所以,它是一个`dirname($ 0)` (3认同)