在zsh shell中,为什么可以';我是否向位置参数传递多个参数? 我最近开始学习C++。我一直在使用zsh shell中的clang来编译代码。 为此,我每次都使用相同的命令,因此我将其转换为.zsh文件,以稍微简化该过程

在zsh shell中,为什么可以';我是否向位置参数传递多个参数? 我最近开始学习C++。我一直在使用zsh shell中的clang来编译代码。 为此,我每次都使用相同的命令,因此我将其转换为.zsh文件,以稍微简化该过程,zsh,macos-big-sur,Zsh,Macos Big Sur,我的文件中的代码如下: clang++$1-std=c++17-stdlib=libc++-o$2 它适用于单个.cpp文件;也就是说,如果我传递它file.cpp output,它就会完全按照我的要求工作。但是,如果我将多个文件传递给它,clang会抱怨(它说路径无效) 如果我键入以下命令,clang完全按照我的要求执行,它将多个文件编译成一个名为“test”的UNIX可执行文件 clang++multiple.cpp add.cpp input.cpp-std=c++17-stdlib=li

我的文件中的代码如下:

clang++$1-std=c++17-stdlib=libc++-o$2

它适用于单个.cpp文件;也就是说,如果我传递它
file.cpp output
,它就会完全按照我的要求工作。但是,如果我将多个文件传递给它,clang会抱怨(它说路径无效)

如果我键入以下命令,clang完全按照我的要求执行,它将多个文件编译成一个名为“test”的UNIX可执行文件

clang++multiple.cpp add.cpp input.cpp-std=c++17-stdlib=libc++-o test

但是,如果我输入以下内容,它会抱怨。我也尝试过逃离空间,但没有成功

zsh../comp.zsh'multiple.cpp add.cpp input.cpp'尝试

我不明白为什么这不起作用,在别处也找不到任何答案。我对zsh非常不熟悉


提前谢谢

多亏了并说,
multiple.cpp add.cpp input.cpp
作为一个参数传递给了clang++,我才明白了这一点

我将代码更改为:
clang++$@[0,-2]-std=c++17-stdlib=libc++-o$@[-1]
,这样,除了最后一个参数之外的所有参数都作为输入文件单独传递给clang++,最后一个参数作为输出文件传递。

因为引用了它,所以它是一个包含空格字符的参数,不是由空格分隔的多个参数。我不是zsh用户,但我猜
multiple.cpp add.cpp input.cpp
将作为单个命令行参数传递给clang++?我建议您学习
make
或类似工具。@G.m.正确;默认情况下,
zsh
不会对不带引号的参数展开执行分词,这与POSIX规范相反。您也可以使用
${=1}
而不是
$@[0,-2]
强制在空白处拆分值。