我在 Mac OS X 机器上使用以下命令:
cp "/Users/username/Desktop/silverlock-dev/silverlock/../3rdparty/botan-build-desktop/src/libBotan*" "/Users/username/Desktop/silverlock-dev/silverlock-build-desktop/silverlocklib/../bin"
但是我得到:
cp: /Users/username/Desktop/silverlock-dev/silverlock/../3rdparty/botan-build-desktop/src/libBotan*: No such file or directory
该目录中显然有 4 个文件,分别名为:
libBotan.1.0.0.dylib
libBotan.1.0.dylib (symlink to first file)
libBotan.1.dylib (symlink to first file)
libBotan.dylib (symlink to first file)
如果我在复制命令中拼出文件的全名,它就可以正常工作,但我需要能够在构建过程中使用通配符。逻辑和理性告诉我这应该可以正常工作。我是否遗漏了一些简单的东西?
答案1
当您将 * 放在引号中时,它会认为这是文字文件名,而不是进行匹配全部扩展。只需取出引号即可。此外,请查看 superuser.com,那里有此类问题。
答案2
当 shell 在命令行中扩展通配符时,它第一的按空格分割,然后扩展通配符。扩展的文件名(可能包含空格)每个都作为完整参数传递给命令 ( cp
)。
请注意,命令 (cp
在本例中) 永远不会看到您在 shell 命令行上使用的引号,也不会用空格分割其自己的参数。它接收一个未加引号的字符串列表,每个字符串可能包含空格。