如何从 Bash 变量执行 sed 命令?

杰格鲁伊

我有一个 sed 命令可以直接执行。

echo foo > /home/user/bar
sed -i 's/foo/zoo/' /home/user/bar

它也适用于直接嵌入$(...)或 `...` 中。

但是,如果我尝试从 Bash 变量执行它,则会出现错误:

CMD="sed -i 's/foo/zoo/' /home/user/bar"
$CMD

错误:

sed:-e 表达式 #1,字符 1:未知命令:`''

如果我将其回显并获取文件,它也可以工作:

echo $CMD > file
source file

这里发生了什么,我如何让 sed 命令从 Bash 变量运行?

阿努巴瓦

不要将完整命令存储为字符串变量以避免分词。使用数组或 shell 函数:

# store command in an array
cmd=(sed -i 's/foo/zoo/' /home/user/bar)

# execute the command
"${cmd[@]}"

或者使用shell函数:

fn() {
   sed -i 's/foo/zoo/' /home/user/bar
}

#call it as:
fn

阅读此 BASH 常见问题解答:我正在尝试将命令放入变量中,但复杂的情况总是失败!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章