"basename" 用于子 shell returns "command not found"

"basename" used in subshell returns "command not found"

当运行这个脚本:

#!/bin/sh -ex

if [[ $# -ne 1 ]]; then
  echo "./import-public-ssh-key.sh <absolute path to public key>"
  exit 1;
fi

PATH=
KEY=$(basename ${PATH})

我得到:

./import-public-ssh-key.sh: line 9: basename: command not found

没有子 shell basename 工作:

$ basename /Users/mles/.ssh/id_rsa.pub
id_rsa.pub

为什么 basename 在子 shell 中不起作用?如果相关,我正在 mac。

您重置了 PATH。不要那样做。 shell 搜索 PATH 中列出的所有目录,并且您已更改它以便 PATH 不再包含包含 basename 的目录。