在sh中,“${x%% *}”是什么意思?

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

同时,如何在Google中搜索${x%% *}

1
谷歌“bash man page”。 - Barmar
谷歌“如何谷歌Bash表达式” :) “所有计算机科学问题都可以通过增加一层间接性来解决” - Dmytro Sirenko
2个回答

2

0

${x%% *} 是一种很好的方法,可以删除变量 $x 中除第一个单词以外的所有内容。也就是说,给定文本 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

我们寻找第一个_字符,并从该点开始删除到结尾。

要查看更多有趣的命令,您可以查看参考卡片 #字符串操作


关于谷歌搜索的问题,是的,这些字符无法通过他们的搜索引擎进行搜索。相反,我建议您使用SymbolHound
例如,在那里查询${x%% *}会显示有价值的结果。

1
请参见http://meta.stackoverflow.com/questions/289671/how-to-search-for-dollar-sign-or-exclamation-mark。 - tripleee
@tripleee 确实!事实上,我就是问了那个问题:)所以更新一下,加上这个参考。 - fedorqui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接