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

袋鼠016

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

我看到宣布

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

既然找不到答案,那么这段代码的含义是什么?

弥生

它是Shell参数扩展,用于获取脚本名称本身,没有路径

参见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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章