首页 > 解决方案 > 包含单引号或双引号的 Bash 变量扩展

问题描述

我正在编写一个脚本,用于使用 promela 模型自动运行特定测试。

用户必须提供 promela 模型和另一个文件,其中包含他们希望针对该模型运行的 ltl 属性。

我使用以下内容逐行读取文件:

while read line; do 
  do_something()
end < $PROPERTIES

do_something() 更复杂,但我遇到的主要问题是最终我想调用以下

spin -run -m100000 -f $line $PROMELAFILE >> $OUTFILE

最终命令应如下所示

spin -run -m100000 -f '[] true' file.pml >> out.txt

最终命令确实可以从命令行按预期工作。引号对于 -f 选项正常工作是绝对必要的。

问题是 $line 变量,当它从文件中读取时,它看起来像以下

' [] 真的 '

它也可以看起来像

“ [] 真的 ”

它们在语义上是等价的。

但是,我不断收到以下错误

unexpected EOF while look for matching `"'
syntax error: unexpected end of file

无论是单引号还是双引号都会出现这个错误

这让我觉得当 $line 被扩展时,我对 bash 以及 ' 和 " 的使用有些不理解。

您可以提供的任何帮助/理解都会非常有帮助。谢谢!

标签: bashpromelaspin

解决方案


推荐阅读