提问人:F. Zer 提问时间:3/15/2023 最后编辑:CyrusF. Zer 更新时间:3/15/2023 访问量:38
如果参数以变量的形式传递,“runhaskell”则无法查看包
`runhaskell` can't see packages if the arguments are passed in the form of a variable
问:
每当我使用变量将显式参数传递给命令时,为了使特定包可见,例如:runhaskell
#!/bin/bash
args="'-package pandoc'"
runhaskell --ghc-arg="$args"<<EOF
import Text.Pandoc
main :: IO ()
main = print $ "Hello World"
EOF
我收到错误:
:错误:找不到“-package pandoc” 异常:ExitFailure 1
但是,如果我显式输入该变量的内容:
#!/bin/bash
runhaskell --ghc-arg='-package pandoc'<<EOF
import Text.Pandoc
main :: IO ()
main = print $ "Hello World"
EOF
脚本按预期工作。有人知道为什么会这样吗?
答:
1赞
willeM_ Van Onsem
3/15/2023
#1
你第二次通过这个逃脱了。您应该与以下人员合作:
#!/bin/bash
args="-package pandoc" # no quotations in the string
runhaskell --ghc-arg="$args"<<EOF
import Text.Pandoc
main :: IO ()
main = print $ "Hello World"
EOF
通过使用它,您已经清楚地将其用作单个参数,但是如果您在字符串中使用单引号,则这些引号将作为参数的内容传递。换句话说,您将调用第一个参数的内容,因此单引号不是由 shell 解释的,而是提供给可执行文件的。由于它不是以连字符 () 开头的,因此解释器可能会假设它是要运行的文件的名称而不是标志,因此在工作目录中查找具有该名称的文件。"$args"
ghc-arg
'-package pandoc'
runhaskell
-
您还可以传递多个参数,不带引号:$args
#!/bin/bash
args="-package=pandoc -package=pandoc-types" # no quotations in the string
runhaskell -- $args <<EOF
import Text.Pandoc
main :: IO ()
main = print $ "Hello World"
EOF
例如,该命令可以显示参数的内容:echo
$ echo 'foo'
foo
$ echo '"foo"'
"foo"
$ echo "foo"
foo
$ echo "'foo'"
'foo'
因此,“外部”引号(无论 或 )由 shell 解释,但内部引号(如果存在)作为参数值传递。'
"
评论
0赞
F. Zer
3/15/2023
非常感谢!+1 如果我必须使用多个软件包会怎样?我给出了最小的可重现示例,但通常我使用多个示例。
0赞
F. Zer
3/15/2023
args="-package pandoc -package pandoc-types"
给
0赞
F. Zer
3/15/2023
无法解析软件包标志:pandoc -package pandoc-types
0赞
willeM_ Van Onsem
3/15/2023
@F.Zer:它需要一个参数,所以我认为?--ghc-arg="-package p1" --ghc-arg="-package p2"
0赞
willeM_ Van Onsem
3/15/2023
@F.Zer:但我认为你首先不需要,你可以使用我认为?--ghc-arg
runhaskell -- -package p1 -package p2
评论