在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]
强制在空白处拆分值。