假设您将以下命令存储在变量中:
COMMAND='echo hello'
之间有什么区别
$ eval "$COMMAND"
hello
$ bash -c "$COMMAND"
hello
$ $COMMAND
hello
?如果最后一个版本较短,为什么最后一个版本几乎从未使用过(据我所知)却完全相同?
第三种形式与其他两种形式完全不同,但是要理解为什么,我们需要在解释命令时使用bash时要遵循的操作顺序,并查看在使用每种方法时应遵循哪些操作。
eval "$string"
eval "$string"
从#1开始执行上述所有步骤。从而:
>()
被处理$foo
感到非常荣幸sh -c "$string"
…的性能与之相同eval
,但 在作为单独过程启动的新外壳中
;因此,当此新进程退出时,对变量状态,当前目录等的更改将过期。(注意,那就是,新的外壳可以是不同的解释支持不同的语言;即sh -c "foo"
不支持相同的语法bash
,ksh
,zsh
等做的)。
$string
…从第5步“单词拆分”开始。
这是什么意思?
printf '%s\n' "two words"
因此将解析为printf
%s\n
"two
words"
,这与的通常/预期行为printf
%s\n
two words
(外壳使用了引号)相反。
;
s,&
s或类似命令上)。从而:
s='echo foo && echo bar'
$s
…将发出以下输出:
foo && echo bar
…而不是以下情况:
foo
bar
不$(foo)
,不$foo
,不<(foo)
,等等。
>foo
或者2>&1
只是通过字符串拆分创建的另一个单词,而不是shell指令。
我理解经典例子的问题 但我无法说服自己以下是有效的还是无效的 我知道'foo(i)'和'i'的求值顺序是不确定的,但是'评估'到底是什么意思?也就是说bar的第二个参数总是42,或者'i'的当前值可以在foo改变它之前被传入吗?
即使我的流不是空的,回退流总是会被创建?这样做背后的意图是什么?这是极不地道的。
我正在使用ansible 2.3.1.1和Jenkins。我遇到了以下问题--我的剧本使用aws动态库存中的变量变得非常慢。最有趣的情况是,如果我在jenkins工作区之外复制这个playbook,并在任何其他目录中运行,执行速度都是可以的。为了测试它,我从工作区目录/group_vars/all中删除了所有的变量文件-之后,这个剧本在工作区中的执行速度也可以了。因此,据我所知,ansible计算
本文向大家介绍Python用eval评估表达式,包括了Python用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例
本文向大家介绍Python使用自定义全局变量使用eval评估表达式,包括了Python使用自定义全局变量使用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例 此外,此代码不能偶然引用外部定义的名称: defaultdict例如,使用可以将未定义的变量设置为零:
问题内容: 我已经知道(困难的方式)需要在JSON数据周围添加括号,如下所示: (至少在Firefox 3中)。 这是什么原因呢?我讨厌写代码而又不了解幕后花絮。 问题答案: 放在括号内实际上等效于 如果要在没有括号的情况下进行评估,则将对代码进行评估,并且如果其中确实有任何命名函数,则将对其进行定义,但不会返回。 举例来说,可以像创建函数一样调用函数: 将调用刚刚定义的函数。但是,以下内容不起作