我有一个直接执行的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变量运行?
答案 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