当前位置:  开发笔记 > 编程语言 > 正文

lambda函数在bash中

如何解决《lambda函数在bash中》经验,为你挑选了2个好方法。

有没有办法在bash中实现/使用lambda函数?我想的是:

$ someCommand | xargs -L1 (lambda function)

j_random_hac.. 21

我不知道如何做到这一点,但是你可能能够完成你想要做的事情:

somecommand | while read -r; do echo "Something with $REPLY"; done

这也会更快,因为您不会为每行文本创建新流程.

[编辑2009-07-09] 我做了两处改动:

    结合litb建议使用-r禁用反斜杠处理 - 这意味着输入中的反斜杠将不加改变地传递.

    我们不是将变量名称(例如X)作为参数提供给read我们,而是read分配给它的默认变量REPLY.这具有保留前导和尾随空间的令人愉快的副作用,否则将被剥离(即使内部空间被保留).

根据我的观察,这些更改一起保留了除每个输入行上的文字NUL(ASCII 0)字符之外的所有内容.

[编辑26/7/2016]

根据评论者Evi1M4chine,$IFS在运行之前设置为空字符串read X(例如,使用命令IFS='' read X)还应该在将结果存储到开头和结尾时保留空格$X,这意味着您不必使用它$REPLY.



1> j_random_hac..:

我不知道如何做到这一点,但是你可能能够完成你想要做的事情:

somecommand | while read -r; do echo "Something with $REPLY"; done

这也会更快,因为您不会为每行文本创建新流程.

[编辑2009-07-09] 我做了两处改动:

    结合litb建议使用-r禁用反斜杠处理 - 这意味着输入中的反斜杠将不加改变地传递.

    我们不是将变量名称(例如X)作为参数提供给read我们,而是read分配给它的默认变量REPLY.这具有保留前导和尾随空间的令人愉快的副作用,否则将被剥离(即使内部空间被保留).

根据我的观察,这些更改一起保留了除每个输入行上的文字NUL(ASCII 0)字符之外的所有内容.

[编辑26/7/2016]

根据评论者Evi1M4chine,$IFS在运行之前设置为空字符串read X(例如,使用命令IFS='' read X)还应该在将结果存储到开头和结尾时保留空格$X,这意味着您不必使用它$REPLY.


好点litb.更多测试表明,使用默认变量REPLY而不是诸如X之类的命名变量,可以保留前导和尾随空格,并且使用-r开关甚至可以保留反斜杠.我会更新主要答案.

2> Evi1M4chine..:

如果你想要真正的函数,而不仅仅是管道或while循环(例如,如果你想传递它们,就像它们是数据一样)我不会做lambdas,并定义具有重复虚拟名称的虚函数,使用正确离开,然后扔掉.像这样:

# An example map function, to use in the example below.
map() { local f="$1"; shift; for i in "$@"; do "$f" "$i"; done; }

# Lambda function [?], passed to the map function.
?(){ echo "Lambda sees $1"; }; map ? *

就像在适当的函数式语言中一样,不需要传递参数,因为您可以将它们包装在闭包中:

# Let’s say you have a function with three parameters
# that you want to use as a lambda:
# (As in: Partial function application.)
trio(){ echo "$1 Lambda sees $3 $2"; }

# And there are two values that you want to use to parametrize a
# function that shall be your lambda.
pre="<<<"
post=">>>"

# Then you’d just wrap them in a closure, and be done with it:
?(){ trio "$pre" "$post" "$@"; }; map ? *

我认为它比这里提出的所有其他解决方案都要短.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有