我的问题是双重的。
First:
在不使用子subshell的情况下,是否有可能做到这一点?
FOO=$((6-5))
还是这个?
BAR=`echo "$FOO/100" | bc -l`
如果我正确地理解了第二个子subshells,我将使用‘和\\创建两个子subshells
第二
为这类内容创建/使用子overall是否会影响脚本的整体性能?
--谢谢
发布于 2013-05-01 06:11:08
您可以检查使用该简单行分配的子进程计数:
bash -c 'echo $$'
它创建新的shell并输出当前进程id。
因为linux中的进程是序列号,所以我们可以使用这个“黑客”来检测命令之间启动了多少进程。(某些进程可以通过cron或at在后台启动,因此需要多次检查结果)。
此外,此命令将启动进程,因此如果您多次启动它,您将看到越来越多的进程。若要获得在此命令之间启动的进程的实际数量,必须将其减为1。
所以开始检查。
$ bash -c 'echo $$'
4240
$ FOO=$((6-5))
$ bash -c 'echo $$'
4241
4241 - 4240 - 1 = 0
。没有启动子进程。
$ FOO=1111
$ bash -c 'echo $$'
4244
$ BAR=`echo "$FOO/100" | bc -l`
$ bash -c 'echo $$'
4248
4248 - 4244 - 1 = 3
。有3个过程已经启动。
如果我们以“这里是一个字符串”开始删除无用的回显:
$ bash -c 'echo $$'
4256
$ BAR=`bc -l <<< "$FOO/100"`
$ bash -c 'echo $$'
4259
4259 - 4256 - 1 = 2
。现在启动了2个子进程。
似乎回显隐式地分配新的shell?
此变体还将创建两个子流程:
read BAR < <(bc -l <<< "$FOO / 100")
发布于 2013-05-01 12:23:21
查看$(( ... ))
不调用子shell的一种方法是修改构造中变量的值,并确保更改在当前shell中是可见的。
$ count=5
$ : $(( count++ ))
$ echo $count
6
如果$(( ... ))
创建了一个子still,那么下面的echo
的输出仍然是5。
https://stackoverflow.com/questions/16312575
复制相似问题