2013-05-07 21 views
7

Makefile'de "$$ {x %% *}" ifadesini gördüm, bu da "$ {x %% *}" anlamına geliyor. Neden bu şekilde yazılmıştır?

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 

Ayrıca nasıl Google ${x%% *} arama ?

+1

Google "bash man page" – Barmar

+0

Google "nasıl google bash ifadesi" :) "Tüm CS sorunları, başka bir dolaylılık seviyesiyle çözülebilir" –

cevap

0

${x%% *}$x değişken ilk kelime ama her şeyi silmek için güzel bir yoldur. Yani, XXX YYY ZZZ numaralı bir metin verildiğinde, bu sözdizimi ilk boşluktan sonra her şeyi siler.

Bazı örnekler:

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

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

O eşdeğerdir:

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

Biz ilk bakmak:

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

emin açıktır geçirmek için, başka bir örnek alalım _ karakter ve bu noktadan sonuna kadar sileriz.

bu ilginç komutların daha görmek için, Reference Cards #String Operations kontrol edebilirsiniz.


Google sorusuyla ilgili olarak, bu karakterler arama motorları aracılığıyla aranamaz. Bunun yerine, SymbolHound'u kullanmanızı tavsiye ederim. Örneğin

, querying ${x%% *} değerli sonucu var gösterir.

+1

Ayrıca bkz. Http://meta.stackoverflow.com/questions/289671/nasıl-to-arama-için-dolar-işareti-veya-ünlem işareti- – tripleee

+0

@tripleee gerçekten! Bu soruyu aslında sordum:) Bu referansla güncellemek. – fedorqui