【问题标题】:Prevent shell command substitution防止 shell 命令替换
【发布时间】:2012-03-13 13:08:20
【问题描述】:

有没有办法防止 shell 脚本中的命令替换?

例如,如果脚本包含如下行:

var=`echo foo`

我想要一种获取 `echo foo` 的方法。不仅仅是 foo 命令的替代品。

编辑:我正在尝试存储这些命令以供以后评估。另外我不能手动编辑脚本;我在 C/C++ 程序中需要这些值,这样我就不得不以某种方式解析脚本,这会破坏目的(这正是我想要避免的:解析脚本)。

编辑#2:这里解释了完整的情况:有这个shell脚本包含一堆这样的变量:

foo="bar"
baz=`some_command`

等等。我希望每个变量都存储表达式的正确部分(即“bar”和“some_command”)。我必须在 C/C++ 程序中执行此操作,因此我无法手动编辑脚本(例如添加单引号)。

【问题讨论】:

  • 你想做什么?如果你想“保护”eval 的字符串,它是not quite that simple
  • 你是否在解析脚本?你说你想从var=`echo foo` 得到`echo foo`,它看起来很像shell 语法,而不是C/C++ 语法。用户是否在应该在 shell 中运行的 C/C++ 程序中键入命令?
  • @l0b0:我不想解析脚本(这是一个漫长而痛苦的方法)。所以,我正在考虑生成一个 shell 作为另一个进程,并用脚本在那里做一些事情。因此,是的,我正在寻找一些 shell 语法/魔法。我提到C/C++程序是为了说明脚本不能手工编辑。

标签: c++ c shell command-substitution


【解决方案1】:

你必须把你的字符串放在单引号中。

var='`echo foo`'

【讨论】:

  • 忘了说我不能手动编辑这个脚本。我想在 C/C++ 程序中获取这些值,所以我必须解析脚本以找到放置单引号的位置,这正是我想要避免的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多