You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Clozure CL的run-program传递引号作为参数?

在Clozure CL中使用run-program传递引号参数的正确方式

要解决向ccl:run-program传递引号参数的问题,核心是理解**run-program直接向外部程序传递参数,不经过shell解析**,因此不需要对引号做额外的shell转义处理:

  1. 传递单个双引号作为参数
    直接在参数列表中传入包含双引号的字符串即可,代码示例:

    (with-output-to-string (stream)
      (ccl:run-program "echo" (list "\"") :output stream)
    )
    

    运行后返回的字符串在Lisp环境中会显示为"\"",但实际内容就是单个双引号。你可以通过(char *返回值* 0)验证,结果为#\"。

  2. 传递被引号包裹的字符串
    如果目标是传递类似"hello world"这样带引号的完整字符串,直接构造包含引号的参数即可:

    (with-output-to-string (stream)
      (ccl:run-program "echo" (list "\"hello world\"") :output stream)
    )
    

    这段代码会让echo输出"hello world",最终得到的字符串就是该内容。

关键说明

ccl:run-program会将参数列表直接映射到外部程序的argv数组,无需像在shell中那样用引号分隔参数或转义特殊字符。之前的问题是混淆了Lisp字符串的转义表示与实际传递的内容——Lisp中用\"表示字符串内的双引号,这个转义仅存在于Lisp代码层面,传递给外部程序的是原始的双引号字符。

内容的提问来源于stack exchange,提问作者Rimaux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:00:31