Bash
管道到包含管道的字元串的命令替換
這行得通——
$ 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
請發布任何其他方式來做到這一點 - 我會對替代品感興趣。