我正在 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。我需要以某种方式创建lab6
or的子字符串,proj2
以便我可以在 URL 中使用lab
or 。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”表示以十进制表示的非负整数,因此它相当于数字序列。)