有没有办法实现不带参数的bash函数,但根据名称的长度而有所不同?

时间:2013-07-03 18:49:02

标签: bash

在我的文件系统中,我发现拥有cd ..的快捷方式是个好主意。因此,我在.bashrc中添加了几行:

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."

因此模式在第一个点之后,尾随点的数量是备份要爬升的层次结构的目录数。我想使它具有可扩展性,理想情况下可以使用函数或其他东西,这样我就可以输入$ ......并将它带到cd ../../../../..。这样的事情可能吗?或者我应该继续添加行到我的.bashrc以覆盖我认为我想要一次性遍历的那么多的地方?

3 个答案:

答案 0 :(得分:4)

您可以使用函数而不是别名来执行此操作。在shell函数运行时,${FUNCNAME[0]}包含函数的名称。

whatsyourname() {
    echo "I am ${FUNCNAME[0]}"
}

但我没有看到这一点。您仍然必须使用此定义定义所有单独的别名或函数。没有办法说“任何只是一堆点的命令应该运行这个功能”并让它计算点数。

为什么不定义一个带有参数的函数up,这是要上升的级别数?因此up 3cd ../../..

答案 1 :(得分:1)

我认为没有办法完全按照你的意愿行事,但实现一个可以调用的脚本是非常简单的:up ...(arbitrary number of .'s)...

当您输入任意数量的.>时,您真正要求的是让BASH调用单个函数的方法。 2.这似乎是一个“通配符函数名称”或其他东西,我认为不可能。

答案 2 :(得分:1)

将其放入.bashrc

cd_func() {
    builtin cd "$(echo "$1" \
    | sed -e ':a
              s@\.\.\.@../..@g
              t a')"
}

alias cd=cd_func

然后cd ...cd ../..相同,cd ....cd ../../..相同,依此类推,可以根据需要添加多个点。您甚至可以cd ..../foo/bar快速移动。

这在DOS日期的命令行中的任何地方都可以使用。 cddir以及所有程序都处理了层次结构中引用文件夹n的任何n点序列。它很棒但是使用Windows XP和新的cmd.exe它停止了工作......