答案1
在zsh
,=cmd
是一個檔案名稱擴展運算符,它擴展為命令的路徑cmd
。=cmd
類似於$commands[cmd]
。
因此,在這裡,使用命令==
的參數之一[
,將其擴展為命令的路徑=
。由於=
您的 中沒有呼叫任何命令$PATH
,因此會導致錯誤。
比較:
$ echo =ls
/bin/ls
$ echo =junk
zsh: junk not found
命令中的相等運算子[
是=
。此[
指令僅執行測試,不執行任何賦值,因此無需像其他一些語言中那樣區分賦值運算子和相等比較運算子(例如 C 中的=
vs或其他語言中的vs==
:=
=
所以它應該只是:
[ "$USER" = root ]
仍然是[
of zsh
,就像 of 一樣ksh
也支援==
作為 的替代選項=
,但除非您停用該equals
選項(就像在ksh
模擬中一樣),否則您需要至少引用第一個=
以避免該=cmd
運算符:
[ "$USER" '==' root ]
請注意, while$USERNAME
是由 自動設定的zsh
,$USER
但不是(儘管它被諸如 之類的東西設定為環境變數login
)。
要測試您是否具有超級使用者權限,檢查您的有效使用者 ID 是否為 0 更為可靠,這可以在zsh
或bash
中使用[ "$EUID" -eq 0 ]
或完成(( EUID == 0 ))
。
也可以看看:
答案2
這行程式碼在語法上並不正確(但bash
可以處理它):
if [ $USER == 'root' ]
您應該==
僅與[[
...一起使用]]
,=
否則。$USER
如果您繼續使用[
...]
語法,我還建議您使用雙引號
if [[ "$USER" == 'root' ]]
或者
if [ "$USER" = 'root' ]