Zsh 数组的最后n个元素
我正在尝试编写一个函数,它将打印$PWD的最后3个元素,如果有3个以上的元素,则在前面加上“…” e、 g 到目前为止,这是我的代码,但是如果数组中的元素太少,Zsh 数组的最后n个元素,zsh,Zsh,我正在尝试编写一个函数,它将打印$PWD的最后3个元素,如果有3个以上的元素,则在前面加上“…” e、 g 到目前为止,这是我的代码,但是如果数组中的元素太少,$foo[-3,-1]将无法工作 function custom_pwd() { d=${PWD/#$HOME/\~} d=(${(s:/:)d}) echo $d[-4,-1] } 以下是我的想法,虽然它并不十分优雅: function custom_pwd() { local d slash d=${PWD/#$H
$foo[-3,-1]
将无法工作
function custom_pwd() {
d=${PWD/#$HOME/\~}
d=(${(s:/:)d})
echo $d[-4,-1]
}
以下是我的想法,虽然它并不十分优雅:
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]}
}
zsh已经有了一些漂亮的提示处理,可以使用print的-p选项。这应该可以做到:
custom_pwd() {
d=$(print -P '%3~')
case $d in
('~'*|/*) echo "$d";;
(*) echo "...$d"
esac
}
有关血淋淋的详细信息,请参见
man zshmisc
“提示序列的扩展”一节。我可能也想知道前一两个元素。
custom_pwd() {
d=$(print -P '%3~')
case $d in
('~'*|/*) echo "$d";;
(*) echo "...$d"
esac
}