栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

与仅评估变量相比,eval / bash -c有什么意义?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

与仅评估变量相比,eval / bash -c有什么意义?

第三种形式与其他两种形式完全不同,但是要理解为什么,我们需要在解释命令时使用bash时要遵循的操作顺序,并查看在使用每种方法时应遵循哪些操作。

Bash解析阶段

  1. 报价处理
  2. 拆分为命令
  3. 特殊运算符解析
  4. 扩展
  5. 分词
  6. 乱语
  7. 执行

使用
eval "$string"

eval "$string"
从#1开始执行上述所有步骤。从而:

  • 字符串中的文字引号变为语法引号
  • 特殊运算符如
    >()
    被处理
  • 扩展如
    $foo
    感到非常荣幸
  • 这些扩展的结果按字符分成空格,分成单独的单词
  • 如果这些词按相同的方式解析并具有可用的匹配项,则这些词将被扩展为glob,最后执行命令。

使用
sh -c "$string"

…的性能与之相同

eval
,但 在作为单独过程启动的新外壳中
;因此,当此新进程退出时,对变量状态,当前目录等的更改将过期。(注意,那就是,新的外壳可以是不同的解释支持不同的语言;即
sh -c"foo"
不支持相同的语法
bash
ksh
zsh
等做的)。


使用
$string

…从第5步“单词拆分”开始。

这是什么意思?

行情不被接受。

printf '%sn' "two words"
因此将解析为
printf
%sn
"two

words"
,这与的通常/预期行为
printf
%sn
two words
(外壳使用了引号)相反。

不会拆分为多个命令(在
;
s,
&
s或类似命令上)。

从而:

s='echo foo && echo bar'$s

…将发出以下输出:

foo && echo bar

…而不是以下情况:

foobar

特殊操作员和扩展人员不予接受。

$(foo)
,不
$foo
,不
<(foo)
,等等。

重定向不适用。

>foo
或者
2>&1
只是通过字符串拆分创建的另一个单词,而不是shell指令。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号