expr 不是 Linux 內置命令,為什么 expr $BASHPID 顯示當前 shell pid?
太奇怪了!我認為它應該輸出子shell pid。
$ type expr
expr is hashed (/usr/bin/expr)
$ echo $$
49207
$ expr $BASHPID
49207
uj5u.com熱心網友回復:
這是正常且預期的:引數擴展發生在命令執行之前,因此BASHPID告訴您確定要傳遞給哪些引數的 bash 實體的 PID expr,而不是其expr自身的 PID。到 afork()發生時,這些論點已經確定。
如果您想要 expr 本身的 PID,您可以使用顯式子shell 使分叉更早發生,然后使用execmakeexpr繼承該子shell 的 PID:
echo "Parent PID is $$ / $BASHPID"
(printf %s 'expr PID is '; exec expr "$BASHPID")
(創建一個顯式子shell(而不是在執行程序中創建的隱式子shell),然后BASHPID提供它的PID;exec導致expr繼承該PID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/523728.html
標籤:linux重击壳
上一篇:如何正確地將環境變數發送到影像?
下一篇:命令awk-F/是什么意思?
