And*_*ong 5 bash pipe io-redirection command-substitution
这有效——
$ x='grep a'
$ echo ab | $x
ab
Run Code Online (Sandbox Code Playgroud)
这不——
$ x='grep a | grep b'
$ echo ab | $x
grep: |: No such file or directory
grep: grep: No such file or directory
grep: b: No such file or directory
Run Code Online (Sandbox Code Playgroud)
它出现在后一种情况下,grep a | grep b
被视为单个命令,即 grep a \| grep b
.
如何在不修改的情况下使第二个示例工作x
?
当您想要运行包含代码的变量时,您通常需要使用命令eval
. 这将扩展变量的内容,以便它们可以被执行。
$ x='grep a | grep b'
$ echo ab | eval "$x"
ab
Run Code Online (Sandbox Code Playgroud)
但是,通常不鼓励使用 eval,因此请谨慎使用,请参阅标题为:Eval 命令和安全问题的BashFAQ 以获取更多示例!