bash参数扩展$ {parameter ## word}

约旦营

我正在阅读apache启动脚本,试图对服务器的某些问题进行故障排除,但是一开始我确实不太了解参数扩展。

SCRIPTNAME="${0##*/}"
SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
if [ -n "$APACHE_CONFDIR" ] ; then
    if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
            DIR_SUFFIX="${APACHE_CONFDIR##/etc/apache2-}"
    else
            DIR_SUFFIX=
    fi
elif [ "${SCRIPTNAME##apache2-}" != "$SCRIPTNAME" ] ; then
    DIR_SUFFIX="-${SCRIPTNAME##apache2-}"
    APACHE_CONFDIR=/etc/apache2$DIR_SUFFIX
else
    DIR_SUFFIX=
    APACHE_CONFDIR=/etc/apache2
fi

我只是想对$ {parameter ## word}构造的作用做些澄清,因为我不清楚gnu的bash参考手册手册是这样定义的...

$ {parameter#word} $ {parameter ## word}

单词被扩展以产生与文件名扩展相同的模式(请参见文件名扩展)。如果模式与参数的扩展值的开头匹配,则扩展的结果是具有最短匹配模式(“#”情况)或最长匹配模式(“ ##”情况)的参数扩展值已删除。如果参数为'@'或'*',则将模式去除操作依次应用于每个位置参数,并且扩展为结果列表。如果parameter是下标为'@'或'*'的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展为结果列表。

这是否意味着第一行将一个空字符串存储回了SCRIPTNAME我的位置?

伊坦·赖斯纳

第一行将basename当前文件的存储在SCRIPTNAME$0是(通常)当前脚本的名称。有关问题的讨论,请参见此相关问题。

然后第二行删除名称的前缀K##前缀S##(假定/etc/init.d链接命名约定)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用带“ $ {parameter:-word}”参数扩展名的引号

来自分类Dev

bash参数扩展$ {parameter:-SUB}与$ {parameter-SUB}

来自分类Dev

Bash:$ {parameter ## word}是什么意思

来自分类Dev

Bash参数扩展$ {parameter / pattern / string}带引号

来自分类Dev

bash:扩展函数参数

来自分类Dev

Bash参数扩展

来自分类Dev

Bash 参数扩展

来自分类Dev

Bash Word生成循环

来自分类Dev

bash参数扩展内的:和:=

来自分类Dev

Bash中数组参数的间接参数扩展

来自分类Dev

是否可以使用“ $ {pattern:?word}”格式修改由参数扩展触发的错误消息?

来自分类Dev

如何创建函数模板,以扩展不代表函数参数的parameter-pack?

来自分类Dev

bash:测试是否设置了$ WORD

来自分类Dev

文件名参数扩展bash

来自分类Dev

Bash %%参数扩展无法统计文件

来自分类Dev

bash非数组$ {!name [@]}参数扩展混乱

来自分类Dev

Bash脚本:不使用$ @或$ *扩展参数

来自分类Dev

使用bash参数扩展获取文件的路径

来自分类Dev

反斜杠字符的Bash参数扩展规则

来自分类Dev

Bash变量参数扩展完整文档

来自分类Dev

Bash参数扩展-贪婪与非贪婪

来自分类Dev

Bash参数扩展:速度的最佳实践?

来自分类Dev

Bash参数扩展以删除选项卡

来自分类Dev

了解bash参数扩展的操作顺序

来自分类Dev

如何结合多bash参数扩展

来自分类Dev

Shell (Bash) 参数扩展表达式

来自分类Dev

Bash:算术扩展,参数扩展和逗号运算符

来自分类Dev

{parameter}和参数之间的区别?

来自分类Dev

您如何调用Word方法并传递参数?