如何使用Scala字符串插值来参数化bash脚本?

时间:2015-11-06 10:32:49

标签: bash scala

我想从Scala中编译一个bash脚本。为了简化这一点,我想使用字符串插值。但是,bash变量和Scala字符串插值似乎并不能很好地相互配合。这是一个例子

val someFile="test.txt"

val bashScript = s"""
newFile=${someFile}.filtered
grep foobar $someFile > $newFile
"""

这将导致编译错误,因为无法插入$ newFile。但是,按字面意思保留$ newFile会产生预期的有效bash脚本。

我想到了可能的解决方案,但我不知道它们是否可行,也不知道如何实施它们

  1. 告诉scala为插值使用不同的前缀 表达,例如通过实施自定义插补器

  2. 以某种方式忽略非插值表达式并将其保留为 他们是。

2 个答案:

答案 0 :(得分:2)

字符串插值的转义字符是$,所以

val someFile="test.txt"

val bashScript = s"""
newFile=${someFile}.filtered
grep foobar $someFile > $$newFile
"""

应该做你想做的事。

答案 1 :(得分:1)

您可以通过添加第二个美元符号来逃避美元符号。所以以下内容应该有效。

val someFile="test.txt"

val bashScript = s"""
  newFile=${someFile}.filtered
  grep foobar $someFile > $$newFile
"""