linux – 从shell脚本中的变量运行shell命令

linux – 从shell脚本中的变量运行shell命令,第1张

概述我试图从 shell脚本中的变量运行命令.正在使用的shell是bash shell. 文件exp包含: abcdef 执行以下命令: sed s/b/\ / exp …产生输出: a cdef 但执行: cmd="sed s/b/\ / exp"echo $cmd$cmd …产生以下错误: sed s/b/\ / expsed: -e expression #1, char 5: unt 我试图从 shell脚本中的变量运行命令.正在使用的shell是bash shell.

文件exp包含:

abcdef

执行以下命令:

sed s/b/\ / exp

…产生输出:

a  cdef

但执行:

cmd="sed s/b/\ / exp"echo $cmd$cmd

…产生以下错误:

sed s/b/\ / expsed: -e Expression #1,char 5: unterminated `s' command

我可以看到在执行前添加eval.但我无法理解为什么.你能解释一下为什么一种方法有效而另一种方法不起作用?

解决方法 你遇到的问题是Bash没有正确解释空间本身.

如果用另一个字符替换b,请查看它是如何工作的,比如X:

$cmd="sed s/b/X/ exp"$$cmdaXcdef

所以解决方法是使用十六进制表示空间,即20:

$cmd="sed s/b/\x20/ exp"$$cmda cdef

或者使用eval来执行命令本身:

$cmd="sed s/b/\ / exp"$eval "$cmd"a cdef

正如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.

总结

以上是内存溢出为你收集整理的linux – 从shell脚本中的变量运行shell命令全部内容,希望文章能够帮你解决linux – 从shell脚本中的变量运行shell命令所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存