鱼壳的官方文件有this example。
function mkdir -d "Create a directory and set CWD"
command mkdir $argv
if test $status = 0
switch $argv[(count $argv)]
case '-*'
case '*'
cd $argv[(count $argv)]
return
end
end
end
我理解case '*'
与C ++ switch语句中的default:
类似。
case '-*'
的含义或用法是什么?
答案 0 :(得分:3)
这是一场全球比赛。
只要切换参数以&#34; - &#34;开始执行,就会执行<case '-*'
。
因为只使用第一个匹配的案例,case '*'
作为最后一个案例就像&#34;默认:&#34;。如果你之前有过它,它会吞下它之后的所有情况。
此处的引号也是必要的,因为否则fish会扩展glob,这意味着case -*
会将当前目录中所有匹配的文件名作为参数,所以如果切换参数是名称,则为真当前目录中以&#34; - &#34;。
答案 1 :(得分:2)
在@faho's answer的帮助下,我理解-*
的目的。
-*
是glob模式。它与*.pdf
或Report_2016_*
等模式完全不同。
作者添加了此项检查以忽略以-
开头的所有目录。它将创建一个以-
开头的目录,但不会将CWD设置为它。
原因是-
在shell中有特殊用法。
例如,cd -
不会将目录更改为名为-
的目录。相反,它会切换到您所在的最后一个目录。
名称以-
开头的目录或文件是麻烦的来源。关于SO姐妹网站的以下问题提出了一个想法。