Bash

管道到包含管道的字元串的命令替換

  • December 19, 2019

這行得通——

$ x='grep a'
$ echo ab | $x
ab

這不——

$ 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

它出現在後一種情況下,grep a | grep b被視為單個命令, grep a \| grep b.

如何在不修改的情況下讓第二個範例工作x

當您想要執行包含程式碼的變數時,您通常需要使用命令eval。這將擴展變數的內容,以便它們可以被執行。

例子

$ x='grep a | grep b'
$  echo ab | eval "$x"
ab

但是,通常不鼓勵使用 eval,因此請謹慎使用,請參閱此 BashFAQ,標題為:Eval 命令和安全問題以獲取更多範例!

參考

啊,經過一些實驗,我想通了——使用alias——

$ x='grep a | grep b'
$ alias y=$x
$ echo ab | y
ab

請發布任何其他方式來做到這一點 - 我會對替代品感興趣。

引用自:https://unix.stackexchange.com/questions/108757