我刚刚在makefile中看到“$$ {x %% *}”,这意味着sh中的“$ {x %% *}”。 为什么用这种方式写的?
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%% *}
?
答案 0 :(得分:2)
${x%% *}
将x
变量的值替换为最左边的空格,并删除其右侧的所有内容。
请参阅http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
对于第二个问题,我没有答案。
答案 1 :(得分: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
我们会查找第一个_
字符,我们会从该点删除直至结束。
要查看更多这些有趣的命令,您可以查看Reference Cards #String Operations。
关于Google问题,是的,这些字符无法通过搜索引擎进行搜索。相反,我建议你使用SymbolHound。
例如,querying ${x%% *}显示了有价值的结果。