2

bashcript を使用して単一の引数として sbcl に文字列を渡したいのですが、sbcl は文字列をリストに分割します。

バッシュスクリプト

#!/bin/bash

    sbcl --noinform --eval "(progn (FORMAT t \"~{~a~%~}\" sb-ext:*posix-argv*)(eval (read-from-string (second sb-ext:*posix-argv*))))" $1

実行:

>sh bashsrcipt.bs "\"(FORMAT t \"YEAH\")\""
sbcl
"(FORMAT
t
"YEAH")"

debugger invoked on a END-OF-FILE in thread
#<THREAD "initial thread" RUNNING {1002999833}>:
  end of file on #<SB-IMPL::STRING-INPUT-STREAM {100443F523}>

しかし、結果は

>sh bashcript.bs "\"(FORMAT t \"YEAH~%\"\")"
sbcl
"(FORMAT t \"YEAH\")"
YEAH

マニュアルには、そのような動作については言及されていません。

4

2 に答える 2

8

スクリプトで引用する必要がある$1と思います:

sbcl --noinform --eval "..." "$1"

--eval(明確にするために省略された引数)

于 2012-08-22T12:45:47.487 に答える
2

$1""空白文字が含まれている場合に単一の引数として渡す場合は、で囲む必要があります。

#!/bin/bash
sbcl --noinform --eval "(progn (format t \"~{~a~%~}\" sb-ext:*posix-argv*) (eval (read-from-string (second sb-ext:*posix-argv*))))" "$1"

さらに、コマンドライン引数の\"前後を削除する必要があります。これにより、リストではなく文字列が返され、それ自体が評価されます。つまり、2つのsは、引数の実行を妨げています。(FORMAT ...)read-from-string\"FORMAT

$ sh bashscript.bs "\"(FORMAT t \"YEAH~%\")\""
sbcl
"(FORMAT t "YEAH~%")"
$ sh bashscript.bs "(FORMAT t \"YEAH~%\")"
sbcl
(FORMAT t "YEAH~%")
YEAH
于 2012-08-22T12:56:16.287 に答える