在管道命令行

时间:2015-06-01 13:09:39

标签: bash shell command-line command-line-interface

是否有办法设置变量,然后在整个管道bash命令中重复使用它,例如

> set v <VALUE> | comm1 v | comm2 v

2 个答案:

答案 0 :(得分:2)

我不确定您希望流过第一个管道但是我想以下解决了您的问题。假设您使用bash

v=<VALUE>; comm1 $v | comm2 $v

请注意,=左右不允许有空格。

答案 1 :(得分:0)

你似乎已经描述了这个问题的方式,没有。如果在命令之前分配值,则该值将导出到命令的环境中,但不会影响当前(shell)环境。

$ echo $x

$ x=123 bash -c 'echo $x'
123
$ echo $x

$

使用管道时,您需要创建当前shell的子shell,因此只能识别当前shell和后续子shell中指定的名称。

$ a=123; echo wat | echo $a
123
$ #                 ^ subshell ^

当然,如果您只是将作业分配为一个单独的步骤,那么这很容易做到这一点,如...

a=123; foo | ( b=123; bar ) | baz …

但您需要手动包装子shell,以便赋值成为每个管道块的一部分。

或者,您可以创建完整的shell作为子项:

a=123 bash -c 'echo $a | bar | baz'

但我无法想到任何方式,这比你在需要时分配价值更好。