在不使用外部命令的情况下匹配以特殊字符开头的子字符串

matching substring beginning with special characters without using external commands

我想要一个函数 abc123,它被称为:

abc123 -std=c++17 -Wall -lstdc++ -lpthread -o xxx xxx.cpp yyy.cpp

我想收集参数中所有以“-l”开头的子字符串。

这就是我 运行 喜欢的东西:

%> echo (string match "l*" (string split " " "std=c++17 Wall lstdc++ lpthread o xxx xxx.cpp"))
%> lstdc++ lpthread

这很好。但以下将导致错误,因为连字符被解释为选项:

echo (string match "-l*" (string split " " "-std=c++17 -Wall -lstdc++ -lpthread -o xxx xxx.cpp"))

您只需添加 -- 以将选项与参数分开:

string match -- "-l*" (string split -- " " "-std=c++17 -Wall -lstdc++ -lpthread -o xxx xxx.cpp")
# ...........^^.....................^^
-lstdc++
-lpthread