如果我在一个文件中定义了一个函数,比如说test1.sh:
#!/bin/bash
foo() {
echo "foo"
}
在第二个脚本test2.sh中,我试图重新定义foo
:
#!/bin/bash
source /path/to/test1.sh
...
foo() {
...
echo "bar"
}
foo
有没有一种方法可以将 test2.sh 更改为生成以下内容:
foo
bar
我知道可以使用Bash内置的command
命令实现,但我想知道是否可以扩展用户函数?
declare -f foo | tail -n+3 | head -n-1
有效。 - Oleh Prypinhead -n1
将会获取任何输入的第一行,这里只有一个foo
的定义,所以我不认为它会产生任何有用的作用。但是你说得对,我应该使用tail
而不是head
。已经更正了,感谢提醒。(顺便说一句,保留原始函数定义周围的大括号是有意义的。它们不会造成任何损害。) - ricihead
调用中的-
。它会丢弃最后一行(括号)。 - Oleh Prypingrep -v -E -e '\{$' -e '^}'
替代tail
和head
,代码如下:'"$(declare -f foo | grep -v -E -e '\{$' -e '^})"'
。 - wviana