我想知道为什么这个命令行不打印pidof sh
:
$ sh -c "var=`pidof sh` ; echo \$var; ps -H"
这123
按预期打印
$ sh -c "var=123 ; echo \$var; ps -H"
我使用的是 Ubuntu Linux。
答案1
你错过了引号。一种方法是:
sh -c "var=\"`pidof sh`\" ; echo \$var; ps -H"
其他:
sh -c "var=\"\`pidof sh\`\" ; echo \$var; ps -H"
pidof sh
请注意,它们在执行时有所不同!在第一个版本中,反引号 ( ) 内的表达式pidof sh
由当前 shell 执行 - 即前 sh -c
正在运行。在第二个中,它是sh -c
执行的命令pidof
。更重要的是,它pidof
是在一个子 shell 中执行的,该子 shell 计算反引号内的表达式 - 因此您会在var
变量中列出一个额外的 pid。 (更简单地说:反引号调用另一个 shell然后由 pidof 列出。)
对于两者来说,更好的方法是使用$( ... )
or \$( ... )
。