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

  • 本文关键字:参数 word 扩展 bash bash
  • 更新时间 :
  • 英文 :


我正在阅读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

我只是在寻找一些澄清$ {参数## Word}构造所做的事情,因为GNU的BASH参考手册对我来说尚不清楚。手册是这样定义的...

$ {参数#word} $ {参数## word}

与文件名扩展一样,该单词被扩展以产生模式(请参见文件名扩展)。如果图案与 参数的扩展值的开始,然后 扩展是参数的扩展值,最短 匹配模式("#"情况)或最长的匹配模式( " ##"案例)已删除。如果参数为"@"或"*",则删除模式 操作依次应用于每个位置参数,然后 扩展是结果列表。如果参数是数组变量 使用"@"或"*"订阅,应用了模式删除操作 依次对阵列的每个成员,扩展是 结果清单。

这是否意味着第一行将一个空字符串存储回SCRIPTNAME,还是我离基地之外?

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

第二行从名称中剥离K##S##的前缀(假设/etc/init.d链接命名约定。

相关内容

  • 没有找到相关文章