在 Zsh 中查找字符串的索引和子字符串?

在 Zsh 中查找字符串的索引和子字符串?

我正在 zshrc 文件中创建函数来帮助我导航到某些经常访问的网页。例如,调用61b将打开https://sp21.datastructur.es/,61b lab6将打开https://sp21.datastructur.es/materials/lab/lab6/lab6,并且61b proj2会打开https://sp21.datastructur.es/materials/proj/proj2/proj2。我需要以某种方式创建lab6or的子字符串,proj2以便我可以在 URL 中使用labor 。proj

function 61b() {
  if [ -n "$1" ]; then
    open https://sp21.datastructur.es/materials/??/$1/$1
  else
    open https://sp21.datastructur.es/
  fi
}

我会在里面放什么??。我已经尝试了几乎所有的事情。

答案1

您可以通过使用更复杂的形式来执行许多字符串操作参数扩展形式或(或它们的组合)。${stuffPARAM}${PARAMstuff}

例如,${1%%[0-9]##}第一个参数 ( $1) 是带有数字 (通配符模式 [0-9]##) 在 ( ) 末尾删除${…%%…}setopt extended_glob为了使通配符模式[0-9]##发挥作用,您需要有;将其放入您的.zshrc或函数中:

function 61b() {
  setopt local_options extended_glob unset
  if [ -n "$1" ]; then
    open https://sp21.datastructur.es/materials/${1%%[0-9]##}/$1/$1
  else
    open https://sp21.datastructur.es/
  fi
}

[0-9]##您可以使用代替<->,它代表任意范围内的数字。 (“Number”表示以十进制表示的非负整数,因此它相当于数字序列。)

相关内容