jstar100x Asked: 2024-12-06 23:54:37 +0800 CST2024-12-06 23:54:37 +0800 CST 2024-12-06 23:54:37 +0800 CST 为什么命令替换会导致“未找到命令错误”? 772 所以 $(cat /etc/passwd) 结果为“没有这样的文件或目录” 和 "$(whereis cat)" 结果“未找到命令” 为什么命令替换没有按预期工作? bash 1 个回答 Voted Best Answer AdminBee 2024-12-07T00:08:52+08:002024-12-07T00:08:52+08:00 TL;DR:您可能以错误的方式使用命令替换。 虽然您没有提供完整的错误消息,但命令替换很可能按照预期的方式工作。 命令替换意味着将命令的输出放在指定命令替换的位置。这意味着如果你有一个脚本,其中有一行 $(cat /etc/passwd) 脚本将尝试执行文件的内容/etc/passwd,如 所示cat,该文件由 分隔的字段组成,:例如 root:x:0:0:root:/root:/bin/ash 这当然不是一个有效的命令。 类似地,如果你有一行 $(whereis cat) 在你的脚本中,它将尝试执行“命令” cat: /bin/cat /usr/share/man/man1/cat.1.gz (或类似情况,取决于您的发行版)这将失败,因为您的系统上没有命令cat:。使用" ... "-quoting(通常是正确的做法)会使这种情况更加严重,这会使 shell 将整行(包括空格)视为它尝试执行的一个命令名。
TL;DR:您可能以错误的方式使用命令替换。
虽然您没有提供完整的错误消息,但命令替换很可能按照预期的方式工作。
命令替换意味着将命令的输出放在指定命令替换的位置。这意味着如果你有一个脚本,其中有一行
脚本将尝试执行文件的内容
/etc/passwd
,如 所示cat
,该文件由 分隔的字段组成,:
例如这当然不是一个有效的命令。
类似地,如果你有一行
在你的脚本中,它将尝试执行“命令”
(或类似情况,取决于您的发行版)这将失败,因为您的系统上没有命令
cat:
。使用" ... "
-quoting(通常是正确的做法)会使这种情况更加严重,这会使 shell 将整行(包括空格)视为它尝试执行的一个命令名。