2011-08-28 17 views
19

"Cdargs-bash.sh" komut dosyasını cdargs paketleriyle anlamaya çalışıyorum.yeni satır karakterini bash değişkenine mi ekliyorsunuz?

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 

}

test amacı nedir: Ve aşağıdaki işlevinde hakkında bir sorum var Burada

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

iki hat üzerinde test açıklığı; $dir'daki yeni satır karakterini veya başka bir sebepten dolayı kaldırmak ister mi? Sadece bash komut dosyasını öğrenmeye başlıyorum ve biraz zaman geçirdim ancak böyle bir kullanım bulamadı.

cevap

35

Evet haklısınız, yeni satır karakterini kaldırır. Testin amacının $dir'un birden fazla satır içermediğinden emin olmak olduğunu düşünüyorum.

Alternatif olarak, ben daha iyi görünüyor düşünüyorum böylece bu iki satır gerektirmez

${dir/$'\n'/} 

tarafından \newline kaldırabilirsiniz.

+0

Peki, verdiğiniz öneri çok iyi çalışıyor. $ '\ N' burada değişken ikamesi midir? Anlayamadım. – yorua007

+4

Hayır, buna "ANSI-C Quoting" denir, bkz. Http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting –

+0

oh, anladım. Çok teşekkürler. – yorua007

İlgili konular