如何在使用匹配模式

时间:2016-03-11 20:34:22

标签: bash function shell

我想利用函数来获取脚本的完整路径和目录名称。 为此我做了两个功能:

function _jb-get-script-path ()
{
    #returns full path to current working directory 
    # + path to the script + name of the script file
    return $PWD/${0#./*}
}

function _jb-get-script-dirname ()
{
    return ${(_jb-get-script-path)##*/}
}

因为$(_ jb-get-script-path)应该被调用的函数的结果替换。 但是,我收到错误:${(_jb-get-script-path)##*/}: bad substitution

因此我尝试了另一种方式:

function _jb-get-script-path ()
{
    return $PWD/${0#./*}
}

function _jb-get-script-dirname ()
{
    local temp=$(_jb-get-script-path);
    return ${temp##*/}
}

但在这种情况下,第一个函数会导致错误:numeric argument required。我尝试运行local temp=$(_jb-get-script-path $0),以防通过函数调用提供$ 0(或者我不知道为什么),但它没有改变任何内容

我不想复制第二个功能的内容,因为我不想无缘无故地复制代码。 如果你知道为什么会发生这些错误,我真的很想知道为什么,当然,如果你有更好的解决方案,我会很高兴听到它。但我真的很想解决这个问题。

1 个答案:

答案 0 :(得分:1)

您需要使用echo而不是return来返回数字状态:

_jb-get-script-path() {
    #returns full path to current working directory
    # + path to the script + name of the script file
    echo "$PWD/${0#./*}"
}

_jb-get-script-dirname() {
    local p="$(_jb-get-script-path)"
    echo "${p##*/}"
}

_jb-get-script-dirname