2013-05-07 3 views
7

Ich sah nur "$$ {x %% *}" in einer Make-Datei, die "$ {x %% *}" in sh bedeutet. Warum ist es so geschrieben?

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 

Auch, wie ${x%% *} in Google suchen?

+1

Google "bash man page" – Barmar

+0

Google "wie Google Bash Ausdruck" :) "Alle CS-Probleme können mit noch einer anderen Ebene der Indirektion gelöst werden" –

Antwort

0

${x%% *} ist eine schöne Art und Weise alles, aber das erste Wort in der $x Variable zu löschen. Das heißt, da ein Text XXX YYY ZZZ, wird diese Syntax alles nach dem ersten Raum löschen.

Einige Beispiele:

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

ein weiteres Beispiel ist klar, wir müssen sicherstellen, dass:

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

Wir waren zum ersten Blick

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

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

Es äquivalent ist _ Zeichen und wir löschen von diesem Punkt bis zum Ende.

Um mehr dieser interessanten Befehle zu sehen, können Sie Reference Cards #String Operations überprüfen.


In Bezug auf die Google-Frage, ja, diese Zeichen sind nicht durchsuchbar durch ihre Suchmaschine. Stattdessen würde ich Ihnen empfehlen, SymbolHound zu verwenden.

Zum Beispiel querying ${x%% *} es zeigt einen wertvollen Ergebnis.

+1

Siehe auch http://meta.stackoverflow.com/questions/289671/how-to-search-for-Dollar-Zeichen-oder-Ausrufezeichen – tripleee

+0

@tripleee in der Tat! Ich habe diese Frage tatsächlich gestellt:) Also mit dieser Referenz aktualisieren. – fedorqui