gpt4 book ai didi

bash - shell中 "${0##*[\\/]}"是什么意思?

转载 作者:行者123 更新时间:2023-11-29 09:41:51 24 4
gpt4 key购买 nike

我在查看其他人的 shell 脚本时遇到了问题。

我看到声明了

APP_NAME="${0##*[\\/]}"

既然找不到答案,请问这段代码是什么意思?

最佳答案

Shell Parameter Expansion获取脚本名称本身,没有路径

参见 bash手册:

${parameter##word}

The word is expanded to produce a pattern and matched according to the rules described below (see Pattern Matching).

If the pattern matches the beginning of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ‘#’ case) or the longest matching pattern (the ‘##’ case) deleted.

Pattern Matching :

*

Matches any string, including the null string. When the globstar shell option is enabled, and ‘*’ is used in a filename expansion context

[…]

Matches any one of the enclosed characters.

说明

${parameter<...>} expression表示可以扩展shell参数。

${1:-"default_arg_value"}将扩展为 "default_arg_value"如果脚本在没有参数的情况下运行。

0 - 是第 0 个参数,即脚本名称本身

${0##<pattern>}将删除与 <pattern> 最长的匹配的一部分 $0

*[\\/]表示以 \ 结尾的任何字符串或 /符号。

所以,APP_NAME="${0##*[\\/]}"意味着 $APP_NAME将由脚本名称本身初始化,没有路径。

示例

假设您有脚本 a/b/c/d/test.sh :

#!/bin/bash
echo "${0##*[\/]}"
echo "${1#*[\/]}"
echo "${2##[\/]}"
$ bash a/b/c/d/test.sh /tmp/e /tmp/ff
> test.sh
> tmp/e
> tmp/ff

关于bash - shell中 "${0##*[\\/]}"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57967131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com