当我查看其他人的shell脚本时遇到了问题。
我看到宣布
APP_NAME="${0##*[\\/]}"
既然找不到答案,那么这段代码的含义是什么?
参见bash
手册:
${parameter##word}
单词被扩展以产生一个模式,并根据下面描述的规则进行匹配(请参见模式匹配)。
如果模式与参数的扩展值的开头匹配,则扩展的结果是具有最短匹配模式(“#”情况)或最长匹配模式(“ ##”情况)的参数扩展值已删除。
模式匹配:
*
匹配任何字符串,包括空字符串。当
globstar
壳选项被激活,和“*”是在文件名扩展上下文中使用
[…]
匹配其中任何一个字符。
${parameter<...>}
表达式表示您可以扩展外壳参数。
即${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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句