2015-05-05 124 views
4

字符*?被用作路径名中的通配符。如何引用一个文件名为?作为其实际字符之一?例如: [18]> (wild-pathname-p #p"foo") NIL [19]> (wild-pathname-p #p"foo?") T 所以引用文件名“foo?”不能这样做。我试图用反斜杠来避开?,但那没有奏效。我试着用\u3f\u003f去unicode,但那不起作用。Common Lisp中的路径名,其中包含通配符的文件名

如何引用包含通配符作为其名称一部分的文件:如何探测,打开它等?

回答

3

它取决于实现,但对于某些实际上,反斜杠确实有效。但是因为namestring是字符串,所以要得到一个带有反斜杠的字符串,就必须用另一个反斜杠来反转反斜杠。所以,例如,"foo?"转义为"foo\\?",而不是"foo\?"

我上次在CLISP中检查时,没有办法在名称中引用带有通配符的文件。我的解决方案是避免CLISP。

+0

SBCL表现出与CLISP类似的行为,所以显然常见的lisp标准不包括转义通配符的机制,这很奇怪。 奇怪的是,cltl2(第628页)给出了一个用于路径名称字符串的BNF,它不包含'?'字符。只有'*'广告'**' –

+0

SBCL支持使用反斜杠进行转义。 – Xach

+1

在路径名组件中使用'*'和'?'进行Unix风格的匹配是路径名和名称字符串语法的非标准但频繁的扩展。 – Xach

1

我的Mac上运行Mac OS X 10.10.3:Clozure CL,SBCL和LispWorks写一个路径与*这样的:

#P"/private/tmp/test.\\*" 

他们可能在其他一些细节有所不同,但。

+0

(wild-pathname -p #p“test。\\ *”)在sbcl中返回T,但在clisp中返回NIL。这似乎是问题:没有办法在clisp中删除通配符的特殊状态。 –

相关问题