2013-05-07 9 views
7

मैंने अभी मेकफ़ाइल में "$$ {x %% *}" देखा है, जिसका अर्थ है "$ {x %% *}" sh। इस तरह से क्यों लिखा गया है?

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%% *} खोज करने के लिए कैसे?

+1

Google "बैश मैन पेज" – Barmar

+0

Google "बैश एक्सप्रेशन कैसे करें" :) "सभी सीएस समस्याओं को अभी तक एक और स्तर के संकेत के साथ हल किया जा सकता है" –

उत्तर

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%%_*} 
aaa abbb 

हम पहले के लिए देखो:

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

यकीन है कि यह स्पष्ट है बनाने के लिए, चलो एक और उदाहरण है चलो _ चरित्र और हम उस बिंदु से अंत तक हटाते हैं।

इन दिलचस्प आदेशों में से अधिक देखने के लिए, आप Reference Cards #String Operations देख सकते हैं।


Google प्रश्न के संबंध में, हाँ, ये वर्ण उनके खोज इंजन के माध्यम से खोजने योग्य नहीं हैं। इसके बजाय, मैं आपको SymbolHound का उपयोग करने की सलाह दूंगा।

उदाहरण के लिए, querying ${x%% *} वहां एक मूल्यवान परिणाम दिखाता है।

+1

यह भी देखें http://meta.stackoverflow.com/questions/289671/डॉलर-साइन-या-एक्सक्लेमेशन-मार्क – tripleee

+0

@ ट्रिपली वास्तव में! मैंने वास्तव में उस सवाल से पूछा:) तो इस संदर्भ के साथ अद्यतन। – fedorqui

संबंधित मुद्दे