你没有; 您需要使用eval
在常规字符串参数中嵌入任意管道.
MYCMD="VBoxManage showvminfo --machinereadable \"$1\" | grep 'VMState=\"poweroff\"'" eval "$MYCMD"
但是,除非您确定值$1
不会导致问题,否则不建议这样做.(如果您需要解释这些风险可能是什么,那么您不应该使用eval
.)
相反,定义一个shell函数:
mycmd () { VBoxManage showvminfo --machinereadable "$1" | grep 'VMState="poweroff"' } mycmd "$1"