|
|
1
43
以下是消除临时文件的方法:
|
|
|
2
18
进一步高呼
从@Dmitri Rubinstein的解决方案开始:
一旦
|
|
|
3
13
啊哈。找到了一个解决方案,尽管它不是很漂亮:
我相信这可以通过一个真正的bash向导来改进。特别是,最好不要再需要临时文件了。 :bash向导埃文·布罗德奋起迎接挑战(见上文接受的答案)。我将他的答案重新表述为一个通用的“复制函数”:
可以这样使用:
很不错的! |
|
|
4
8
如果你只是想在名字前面加上什么,说
|
|
|
5
5
通过使用shell参数展开而不是tail命令,可以改进copy_函数:
|
|
|
6
4
要总结所有其他解决方案并部分纠正它们,以下是解决方案:
但是:
一切结合起来:
现在测试:
所需的产出:
现在,请尝试一些更复杂的案例,这些案例都给出了预期的结果或失败:
有人可能会说,以下仍然是一个bug:
现在这也抓住了这个人工案例。(请注意
当然,您可以将其拆分为复制+重命名,如下所示:
我希望这是101%的解决方案。如果需要改进,请评论;) |
|
|
7
2
以下是一个基于@Evan Broder方法的函数:
一旦定义了它,您就可以简单地执行
一旦定义了这些函数,假设您有一个现有函数,如下所示:
然后你可以做:
使用
|
|
|
8
2
对于我们这些被迫与bash 3.2兼容的人(你知道我们在谈论谁),
在函数形式中,它看起来像
如果你真的不想依赖
但这对我来说有点罗嗦 |
|
|
9
0
我知道这是一个老问题,但是还没有人用递归来解决这个问题。 有一种干净的方法可以复制递归函数,它依赖于Bash的一个模糊的角落。事实上,它是如此晦涩难懂,以至于我对它的申请感到惊讶。就这样。 但是,正如下面解释的,这个技巧不足以处理所有递归函数。这就是为什么我还提出了另一个解决方案,它可能更直接,但也更昂贵。 使用别名的部分解决方案解释
从…起
否则,当定义一个函数时,该函数体中出现的所有别名
那个
时间延长了。(相反,调用函数时不会发生别名扩展。)可以利用这一点来替代函数体内部的递归调用,而无需诉诸肮脏、不可靠的方法
密码下面给出的代码是本着 @ingidotnetâs excellent answer ,增加了对递归函数的支持。
例1以下代码:
将按预期工作(使用bash 5.0.7进行测试):
例2但是,以下递归函数不能正确重命名。
输出为:
这里有另一种方法。只需将新函数定义为包装器函数,包装器函数在本地重新定义原始函数并调用它。 与别名技巧相比,这可以处理所有递归调用,但成本要高得多,因为在每次调用新函数时都会重新定义和恢复原始函数。 下面是与该想法相对应的代码。据我所知,它没有剩余的缺陷。
例2这一次,上面的示例2按预期工作:
|