小编Wei*_* Li的帖子

命令替换中的bash变量替换

我想做类似以下的事情:

#!/bin/bash

cmd="find . -name '*.sh'"
echo $($cmd)
Run Code Online (Sandbox Code Playgroud)

我期望它会显示当前目录中的所有shell脚本文件,但什么也没发生.

我知道我可以根据这篇文章解决eval的问题

#!/bin/bash

cmd="find . -name '*.sh'"
eval $cmd
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么命令替换在这里不起作用,$(...)和eval在问题方面的区别是什么?

bash shell

6
推荐指数
1
解决办法
7254
查看次数

ocaml 在脚本模式下不加载 .ocamlinit

我发现当我ocaml在终端(即交互模式)中运行时,它将加载.ocamlinit. 但是,当我运行时ocaml test.ml,即在脚本模式下,它不会加载.ocamlinit文件。这实际上给我带来了一些麻烦,因为我的设置如下.ocamlinit

let () =
  try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
  with Not_found -> ()
;;

#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
Run Code Online (Sandbox Code Playgroud)

因此,当我以交互模式运行时,#use "topfind"将被执行,并且我可以在代码中打开其他库。但由于.ocamlinit未在脚本模式下加载,当我ocaml test.ml在终端中运行时,test.ml如下所示:

打开 Core.Std;;

let () = print_endline "你好世界"

它将失败并出现错误:"Error: Unbound module Core"

我的问题是:

  1. 如何解决这个问题,以便ocaml在脚本模式下运行时,该.ocamlinit文件也将被加载?
  2. 为什么ocaml顶层系统不.ocamlinit以脚本模式加载文件?

附:OCaml版本4.01.0

ocaml

4
推荐指数
1
解决办法
646
查看次数

如何将列表传递给常见的lisp中的宏?

我正在尝试将列表传递给宏,例如:

(defmacro print-lst (lst)
  `(progn
     ,@(mapcar #'(lambda (x) `(print ,x)) lst)))
(let ((lst '(1 2 3)))
      (print-lst lst))
Run Code Online (Sandbox Code Playgroud)

它发现错误:"LST值不是LST类型".

所以,我的问题是,这段代码有什么问题以及如何将列表传递给宏?

common-lisp

1
推荐指数
1
解决办法
1985
查看次数

标签 统计

bash ×1

common-lisp ×1

ocaml ×1

shell ×1