我有一个 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句