我在寻找别人的shell脚本时遇到了问题。
我看到声明了
APP_NAME="${0##*[\\/]}"
由于找不到答案,这段代码是什么意思?
答案 0 :(得分:5)
请参见bash
手册:
${parameter##word}
单词会被扩展以产生一个模式,并根据下面描述的规则进行匹配(请参见Pattern Matching)。
如果模式与参数的扩展值的开头匹配,则扩展的结果是具有最短匹配模式('#'大小写)或最长匹配模式('## '案例)删除。
*
匹配任何字符串,包括空字符串。启用
globstar
shell选项后,在文件名扩展上下文中使用“ *”
[…]
匹配其中任何一个字符。
${parameter<...>}
表达式表示您可以扩展外壳参数。
即如果脚本运行时没有参数,则${1:-"default_arg_value"}
将扩展为"default_arg_value"
。
0
-是第0个参数,即脚本名称本身
${0##<pattern>}
将删除与<pattern>
的{{1}}部分的最长匹配项
$0
表示任何以*[\\/]
或\
符号结尾的字符串。
因此,/
意味着APP_NAME="${0##*[\\/]}"
将由脚本名称本身初始化,没有路径。
假设您有脚本$APP_NAME
:
a/b/c/d/test.sh
#!/bin/bash
echo "${0##*[\/]}"
echo "${1#*[\/]}"
echo "${2##[\/]}"