如何实现可以通过管道定义变量的shell函数?

时间:2017-01-08 11:44:09

标签: bash shell

echo 123 | func vvv
echo $vvv

结果是123.如何实施?

2 个答案:

答案 0 :(得分:1)

您可以使用shell提供的command substitution

$(···)

`···`

然后

vvv=$(echo 123)

您无需定义功能。

答案 1 :(得分:1)

第一个问题是您无法使用管道设置变量,因为管道的每个部分都在一个单独的进程中运行,而变量在一个单独的进程中是本地的。

但是,从bash 4.2开始,使用lastpipe选项稍微松开了该限制。只要禁用作业控制,这就可以使管道的 last 部分在同一进程中运行。 (您可以使用set +m执行此操作,但这仅在交互式shell中是必需的;默认情况下,在非交互式shell中禁用作业控制,例如在脚本中。)

使用此选项,您要查找的命令只是read

$ shopt -s lastpipe
$ set +m
$ echo 123 | read vvv
$ echo "$vvv"
123