我想利用函数来获取脚本的完整路径和目录名称。 为此我做了两个功能:
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(或者我不知道为什么),但它没有改变任何内容
我不想复制第二个功能的内容,因为我不想无缘无故地复制代码。 如果你知道为什么会发生这些错误,我真的很想知道为什么,当然,如果你有更好的解决方案,我会很高兴听到它。但我真的很想解决这个问题。
答案 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