2011-07-08 245 views
2

我正試圖編寫一個函數,它將打印出$ PWD的最後3個元素,如果有超過3個元素,則預先使用'...'。陣列的最後n個元素

例如

/home/nornagon/src    --> ~/src 
/home/nornagon/src/foo/bar/baz --> ...foo/bar/baz 

這是到目前爲止我的代碼,但$foo[-3,-1]如果陣列中有太少的元素不起作用。

function custom_pwd() { 
    d=${PWD/#$HOME/\~} 
    d=(${(s:/:)d}) 
    echo $d[-4,-1] 
}
+0

我可能想知道第一個或兩個元素。 –

回答

0

這就是我想出了,雖然它不是非常優雅:

function custom_pwd() { 
    local d slash 
    d=${PWD/#$HOME/\~} 
    case $d in 
    /*) slash=/ ;; 
    *) slash= ;; 
    esac 
    d=(${(s:/:)d}) 
    d[1]=$slash$d[1] 
    num=$#d 
    ellipsis= 
    if ((num > 3)); then num=3; ellipsis='…'; fi 
    echo $ellipsis${(j./.)d[-$num,-1]} 
}
2

zsh的已經有可用打印的-P選項一些漂亮的及時處理。這應該做的伎倆:

custom_pwd() { 
    d=$(print -P '%3~') 
    case $d in 
     ('~'*|/*) echo "$d";; 
     (*)  echo "...$d" 
    esac 
} 

見血淋淋的細節man zshmisc,部分「的提示序列的擴張」。

相關問題