我试图从
shell脚本中的变量运行命令.正在使用的shell是bash shell.
文件exp包含:
abcdef@H_301_5@执行以下命令:
sed s/b/\ / exp@H_301_5@…产生输出:
a cdef@H_301_5@但执行:
cmd="sed s/b/\ / exp" echo $cmd $cmd@H_301_5@…产生以下错误:
sed s/b/\ / exp sed: -e expression #1,char 5: unterminated `s' command@H_301_5@
解决方法
你遇到的问题是Bash没有正确解释空间本身.
如果用另一个字符替换b,请查看它是如何工作的,比如X:
$cmd="sed s/b/X/ exp" $$cmd aXcdef@H_301_5@所以解决方法是使用十六进制表示空间,即20:
$cmd="sed s/b/\x20/ exp" $$cmd a cdef@H_301_5@或者使用
eval
来执行命令本身:$cmd="sed s/b/\ / exp" $eval "$cmd" a cdef@H_301_5@正如Tom Fenech所建议的那样,将命令存储在变量中并不是一种好的方法,如I’m trying to put a command in a variable,but the complex cases always fail!所述.它有时可以工作,但在其他情况下会产生不可预测的结果.另一种方法是考虑使用函数.
最后,注意eval在这种情况下可以派上用场,只是对存储的内容非常小心.一些好的阅读:Variable as command; eval vs bash -c.