最后n个数组元素

时间:2011-07-08 00:52:19

标签: zsh

我正在尝试编写一个函数,打印出$ PWD的最后3个元素,如果有超过3个元素,请事先用'...'。

e.g。

/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]
}

2 个答案:

答案 0 :(得分:2)

zsh已经通过print的-P选项提供了一些漂亮的提示处理。这应该可以解决问题:

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

有关血腥的详细信息,请参阅man zshmisc,“扩展提示序列”部分。

答案 1 :(得分: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]}
}