sed命令评估功能不起作用

时间:2019-03-07 18:55:59

标签: bash sed text-processing

我有这个功能

function test { echo $1; }

我有这个sed表达式

echo "hello" | sed "s/hello/test world/e"

预期结果是

"world"

但是它给出了结果

sh: test: command not found

我的操作系统:linux fedora 20,sed(GNU sed)4.2.2。

有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

Shell函数仅在当前Shell中可用。

不能通过sedenvsudofindxargs等外部命令来调用它们:

$ foo() { echo "hello world"; }

$ foo
hello world

$ sed -e 's/.*/foo/e'
sh: 1: foo: not found

$ env foo
env: ‘foo’: No such file or directory

如果要从这样的上下文中运行shell命令,请将它们放在单独的脚本中,以便可以调用它。

Bash支持将功能导出到子bash实例,但是特别是dash会将它们从环境中剥离,因此即使调用sed的{​​{1}}也不能使用它们,即使您最终运行了另一个bash实例。