包含正在執行的程式名稱。
在某些(但並非全部)作業系統上,指定給 $0
會修改 ps
程式所看到的參數區域。在某些平台上,您可能必須使用特殊 ps
選項或不同的 ps
才能看到變更。修改 $0
作為指示目前程式狀態的方式比用於隱藏您正在執行的程式更有用。
請注意,$0
的最大長度有特定於平台的限制。在最極端的情況下,它可能被限制在原始 $0
佔用的空間中。
在某些平台上,可能會有任意數量的填補,例如空格字元,在修改後的名稱後,如 ps
所示。在某些平台上,此填補可能會一直延伸到參數區域的原始長度,無論您執行什麼動作(例如 Linux 2.2 就是如此)。
BSD 使用者注意事項:設定 $0
並不會完全從 ps(1) 輸出中移除「perl」。例如,將 $0
設定為 "foobar"
可能會導致 "perl: foobar (perl)"
("perl: "
前綴和 " (perl)" 後綴是否顯示取決於您的確切 BSD 變體和版本)。這是作業系統功能,Perl 無法解決。
在多執行緒腳本中,Perl 會協調執行緒,以便任何執行緒都可以修改其 $0
的副本,而變更會對 ps(1) 可見(假設作業系統配合)。請注意,其他執行緒的 $0
檢視不會變更,因為它們有自己的副本。
如果程式已透過 -e
或 -E
開關提供給 perl,則 $0
將包含字串 "-e"
。
在 perl v5.14.0 的 Linux 上,除了透過 argv[0]
變更 POSIX 名稱外,還會使用 prctl(2)
設定舊有程序名稱,這是 perl 自版本 4.000 以來所執行的動作。現在,讀取舊有程序名稱的系統公用程式,例如 ps、top 和 killall,將識別您在指定 $0
時設定的名稱。您提供的字串將在 16 個位元組處切斷,這是 Linux 強制的限制。
寬字元在 $0
值中無效。不過,出於歷史原因,Perl 會接受它們並將它們編碼為 UTF-8。發生這種情況時,會觸發寬字元警告。
助記符:與 sh 和 ksh 相同。