【问题标题】:Check for substring using unix make使用 unix make 检查子字符串
【发布时间】:2026-01-24 16:05:03
【问题描述】:

UNIX make编码,我写过:

cat $ sString | grep sSubstring > sResult

所以我想检查sString 是否包含sSubString,如果是,则将结果放入sResult

背景:我已将文件的内容放入sString - 如果文件中存在sSubString,则sResult 包含包含sSubString 的文件的每一行。

sSubStringsString 中时,这可以正常工作。如果不是,我会得到Error Code 1

我该如何正确处理这个问题?完整代码为:

cat $ sString | grep sSubstring > sResult
if [ -s sResult -gt 0 ];then \
(echo "substring present" ) \
else (echo "substring not present" ) ;fi

(使用错误代码,我永远无法到达 else 。)

【问题讨论】:

  • FWIW,我在这里尝试了其他 string contains 解决方案,但这些解决方案不适用于此 make 文件。

标签: string unix


【解决方案1】:

要检查字符串中是否存在特定的子字符串,您可以使用“findstring”函数。 更多信息在这里:http://www.gnu.org/software/make/manual/html_node/Text-Functions.html

【讨论】:

    【解决方案2】:

    听起来你可能需要这个

    cat $ sString | { grep sSubstring || true; } > sResult
    

    See this solution。问题是当grep 没有找到任何东西时,它会返回一个非零退出代码。 make 会认为这是一个错误。因此,您只需要通过or 确保命令始终返回零退出代码 - 将grep 的退出代码与true 的退出代码相结合。 true的退出码始终为0。

    【讨论】:

    • 太棒了!这很快,而且效果很好。非常感谢!