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

Mac下SBCL命令行参数获取问题求助

在SBCL中获取命令行参数的正确实现

你的问题核心是CLISP的方言扩展*ARGS*在SBCL中不存在,同时代码还有两个小问题:未声明变量、format调用格式错误。以下是修正后的脚本:

#!/opt/homebrew/bin/sbcl --script

(let* ((args (cdr sb-ext:*command-line-arguments*)) ; 去掉第一个元素(脚本自身路径)
       (arg-one (with-input-from-string (strm (first args)) (read strm)))
       (arg-two (with-input-from-string (strm (second args)) (read strm))))
  (format t "Argument One = ~a~%" arg-one)
  (format t "Argument Two = ~a~%" arg-two))

执行命令./test.lisp 11 23就能得到预期输出:

Argument One = 11
Argument Two = 23

关键修正点:

  • 替换*ARGS*为sb-ext:*command-line-arguments*:SBCL用这个标准扩展变量存储命令行参数,其中第一个元素是脚本自身的路径,所以用cdr去除它,剩下的就是传入的参数列表。
  • 用let*声明变量:避免SBCL的未定义变量警告,同时让变量作用域更清晰。
  • 修复format调用:format的第一个参数必须指定输出目标,t代表标准输出,原代码缺少这个参数会导致执行错误。

额外简化方案:

如果不需要用read解析参数(直接使用字符串形式),可以简化代码:

#!/opt/homebrew/bin/sbcl --script

(let ((args (cdr sb-ext:*command-line-arguments*)))
  (format t "Argument One = ~a~%" (first args))
  (format t "Argument Two = ~a~%" (second args)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:55:11