sed命令评估功能不起作用

问题描述 投票:1回答:1

我有这个功能

function test { echo $1; }

我有这个sed表达式

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

预期的结果是

"world"

但它给出了结果

sh: test: command not found

我的操作系统,Linux的Fedora的20,但(GNU但是)4.2.2。

任何解决的想法?

bash sed text-processing
1个回答
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特别会将它们从环境中剥离,因此它们不能用于调用sedsh -c,即使你最终运行第二个bash实例也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.