这对我有用:
CMD="ls -la"
$CMD
虽然这总是失败:
CMD="sed -e 's|abc|abc|g' file"
$CMD
出现错误消息:
sed: -e expression #1, char 1: unknown command: `''
答案1
这是因为当您在命令行上输入命令时,shell 会对其运行“扩展”。最后一步是“引用删除”,但它仅删除不是任何扩展结果的引号。 (看扩展man bash
)这里,引号是变量扩展的一部分,因此它们不会被删除。
您可以输入不带引号的替换以使其起作用:
cmd='sed -e s|abc|abc|g file'
$cmd