6

我刚刚在 makefile 中看到“$${x%% *}”,这意味着 sh 中的“${x%% *}”。为什么这样写?

https://unix.stackexchange.com/questions/28994/how-can-a-makefile-detect-whether-a-command-is-available-in-the-local-machine

determine_sum = \
        sum=; \
        for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
          if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
        done; \
        if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi

checksums.dat: FORCE
    $(determine_sum); \
    $$sum *.org

另外,如何${x%% *}在谷歌中搜索?

4

2 回答 2

2

用最左边的空格${x%% *}替换x变量的值,并删除它右边的所有内容。

http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

对于第二个问题,我没有答案。

于 2013-05-07T08:18:07.237 回答
0

${x%% *}是删除$x变量中除第一个单词以外的所有内容的好方法。也就是说,给定一个 text XXX YYY ZZZ,此语法将删除第一个空格之后的所有内容。

一些例子:

$ x="aaa abbb"
$ echo ${x%% *}
aaa

$ x="aaa abbb bccc defasdfs"
$ echo ${x%% *}
aaa

它相当于:

$ x="aaa abbb bccc defasdfs"
$ echo $x | awk '{print $1}'
aaa

为了确保清楚,让我们再举一个例子:

$ x="aaa abbb_bccc_defasdfs"
$ echo ${x%%_*}
aaa abbb

我们寻找第一个_字符并从该点删除直到最后。

要查看更多这些有趣的命令,您可以查看参考卡#String Operations


关于谷歌的问题,是的,这些字符无法通过他们的搜索引擎搜索到。相反,我建议您使用SymbolHound

例如,在那里查询 ${x%% *}会显示有价值的结果。

于 2013-05-07T09:09:13.573 回答