2011-08-28 9 views
19

मैं cdargs संकुल के साथ "cdargs-bash.sh" स्क्रिप्ट को समझने की कोशिश कर रहा हूं।बैश वैरिएबल में न्यूलाइन कैरेक्टर को प्रतिस्थापित करें?

function _cdargs_get_dir() 
{ 
local bookmark extrapath 
# if there is one exact match (possibly with extra path info after it), 
# then just use that match without calling cdargs 
if [ -e "$HOME/.cdargs" ]; then 
    dir=`/bin/grep "^$1 " "$HOME/.cdargs"` 
    if [ -z "$dir" ]; then 
     bookmark="${1/\/*/}" 
     if [ "$bookmark" != "$1" ]; then 
      dir=`/bin/grep "^$bookmark " "$HOME/.cdargs"` 
      extrapath=`echo "$1" | /bin/sed 's#^[^/]*/#/#'` 
     fi 
    fi 
    [ -n "$dir" ] && dir=`echo "$dir" | /bin/sed 's/^[^ ]* //'` 
fi 
if [ -z "$dir" -o "$dir" != "${dir/ 
/}" ]; then 
    # okay, we need cdargs to resolve this one. 
    # note: intentionally retain any extra path to add back to selection. 
    dir= 
    if cdargs --noresolve "${1/\/*/}"; then 
     dir=`cat "$HOME/.cdargsresult"` 
     /bin/rm -f "$HOME/.cdargsresult"; 
    fi 
fi 
if [ -z "$dir" ]; then 
    echo "Aborted: no directory selected" >&2 
    return 1 
fi 
[ -n "$extrapath" ] && dir="$dir$extrapath" 
if [ ! -d "$dir" ]; then 
    echo "Failed: no such directory '$dir'" >&2 
    return 2 
fi 

} क्या परीक्षण के है:: और मैं निम्नलिखित समारोह में संबंधित कोई प्रश्न है

"$dir" != "${dir/ 
/}" 

यहाँ दो लाइनों पर परीक्षण अवधि; क्या यह $dir में या शायद किसी अन्य कारण से न्यूलाइन वर्ण को हटाना चाहता है? मैं बस बैश स्क्रिप्टिंग सीखना शुरू कर रहा हूं और मैंने कुछ समय गुगल किया है लेकिन इस तरह कोई उपयोग नहीं मिला।

उत्तर

35

हाँ आप सही हैं, यह न्यूलाइन चरित्र को हटा देता है। मुझे लगता है कि परीक्षण का उद्देश्य यह सुनिश्चित करना है कि $dir में कई लाइनें न हों।

वैकल्पिक रूप से, आप द्वारा

${dir/$'\n'/} 

\newline निकाल सकते हैं यह दो पंक्तियों की आवश्यकता नहीं है तो मैं यह बेहतर लग रहा है लगता है।

+0

अच्छी तरह से, सुझाव जो आप देते हैं वह बहुत अच्छी तरह से काम करता है। क्या '$' \ n'' यहाँ परिवर्तनीय प्रतिस्थापन है? मैं बस इसे समझ नहीं सका। – yorua007

+4

नहीं, इसे 'एएनएसआई-सी कोटिंग' कहा जाता है, http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting –

+0

ओह, मुझे मिल गया। बहुत बहुत धन्यवाद। – yorua007

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