Shell中的“ $ {0 ## * [\\ /]}”是什么意思?

时间:2019-09-17 03:55:13

标签: bash parameter-expansion

我在寻找别人的shell脚本时遇到了问题。

我看到声明了

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

由于找不到答案,这段代码是什么意思?

1 个答案:

答案 0 :(得分:5)

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

请参见bash手册:

  

${parameter##word}

     

单词会被扩展以产生一个模式,并根据下面描述的规则进行匹配(请参见Pattern Matching)。

     

如果模式与参数的扩展值的开头匹配,则扩展的结果是具有最短匹配模式('#'大小写)或最长匹配模式('## '案例)删除。

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##[\/]}"
相关问题