为什么sem(GNU parallel)使用单引号和双引号表现不同?

时间:2016-04-23 20:04:44

标签: bash parallel-processing gnu-parallel

我无法理解GNU Parallel中sem的以下行为。 当我使用单引号时,它似乎运作良好:

sem -j1 'echo $(date);sleep 5;echo $(date)'
sem --wait    

给出

Sat Apr 23 15:46:50 EDT 2016
Sat Apr 23 15:46:55 EDT 2016

但是,当我使用双引号时。

sem -j1 "echo $(date);sleep 5;echo $(date)"
sem --wait

结果是

Sat Apr 23 15:46:08 EDT 2016
Sat Apr 23 15:46:08 EDT 2016

似乎sleep 5完全被忽略了。

有人可以解释为什么会这样吗?它是由GNU parallel还是bash引起的?

1 个答案:

答案 0 :(得分:3)

它与sem或GNU parallel无关,而是与shell有关。

当您对字符串使用双引号时,shell会立即展开所有环境变量引用 。如果使用单引号字符串,则shell不会执行该变量扩展。