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

时间:2017-06-08 11:15:56

标签: 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变量运行?

2 个答案:

答案 0 :(得分:3)

不要将完整命令存储为字符串变量以避免单词拆分。使用数组或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

Read this BASH FAQ: I'm trying to put a command in a variable, but the complex cases always fail!

答案 1 :(得分:0)

使用eval:我不确定你为什么要这样做。请注意,使用eval是一个脆弱的解决方案,可能会导致您的脚本崩溃。

eval $CMD