我有这个功能
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。
任何解决的想法?
Shell函数仅在当前shell中可用。
它们不能通过外部命令调用,如sed
,env
,sudo
,find
或xargs
:
$ 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
的sh -c
,即使你最终运行第二个bash实例也是如此。