$(shell xxxx)可以返回多个字符串吗
时间: 2023-11-13 09:03:50 浏览: 91
shell中字符串处理方
`$(shell command)` 是 GNU make 中的一个函数,用于执行一个 shell 命令并返回其输出结果。注意,它返回的是一个字符串,而不是多个字符串。
虽然 shell 命令的输出结果可以包含多行文本,但它们会被作为一个字符串返回。如果你需要使用这个字符串中的每一行,你可以使用 make 内置的字符串函数,例如 `$(subst \n, , $(shell command))` 可以将命令的输出结果中的所有换行符替换为空格,从而将多行文本转换为单行文本。
下面是一个例子:
```makefile
output:
@echo "one"
@echo "two"
@echo "three"
.PHONY: test
test:
$(eval OUTPUT := $(subst \n, , $(shell make output)))
@echo "Output: $(OUTPUT)"
```
在这个例子中,`output` 是一个简单的 Makefile 目标,它会输出三行文本。在 `test` 目标中,我们使用 `$(shell)` 函数来执行 `make output` 命令并获取其输出结果。接着,我们使用 `$(subst)` 函数将换行符替换为空格,从而将多行文本转换为单行文本,并将结果保存到 `OUTPUT` 变量中。最后,我们在屏幕上打印 `OUTPUT` 变量的值,它应该是一个单行文本字符串。
运行 `make test` 命令,你会看到以下输出:
```
Output: one two three
```
这表明 `$(shell)` 函数返回的是一个单行文本字符串,而不是多个字符串。
阅读全文