每当我使用变量将显式参数传递给runhaskell
命令时,为了使特定的包可见,例如:
#!/bin/bash
args="'-package pandoc'"
runhaskell --ghc-arg="$args"<<EOF
import Text.Pandoc
main :: IO ()
main = print $ "Hello World"
EOF
我得到错误:
:错误:找不到'-package pandoc'***异常:退出故障1
但是,如果显式输入该变量的内容:
#!/bin/bash
runhaskell --ghc-arg='-package pandoc'<<EOF
import Text.Pandoc
main :: IO ()
main = print $ "Hello World"
EOF
脚本按预期工作。有人知道为什么会这样吗?
1条答案
按热度按时间wgx48brx1#
您将第二次通过此转义。您应该使用:
通过使用
"$args"
,很明显您将其用作单个参数,但是如果您在字符串 * 内 * 使用单引号,则它们将作为参数的 content 传递。换句话说,您将使用'-package pandoc'
作为第一个参数的 content 来调用ghc-arg
,其中单引号不会被shell解释。因为它 * 不是 * 以连字符(-
)开头,解释器可能会假设它是要运行的文件的名称,而不是标志,因此在工作目录中查找具有该名称的文件。您还可以传递多个参数,
$args
不带引号:例如,
echo
命令可以显示参数的 content:“外”引号(无论是
'
还是"
)由shell解释,但内引号(如果存在)作为参数值传递。